使用Json.NET将任何types的对象转换成JObject

我经常需要在使用WebAPI将其返回给客户端之前使用其他信息扩展我的域模型。 为了避免创buildViewModel,我想我可以返回JObject的其他属性。 我不能find直接的方法来将任何types的对象转换成JObject,只需要调用Newtonsoft JSON库。 我想出了这样的事情:

  1. 第一个SerializeObject
  2. 然后parsing
  3. 并扩展JObject

例如。:

var cycles = cycleSource.AllCycles(); var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; var vm = new JArray(); foreach (var cycle in cycles) { var cycleJson = JObject.Parse(JsonConvert.SerializeObject(cycle, settings)); // extend cycleJson ...... vm.Add(cycleJson); } return vm; 

我这个正确的方法?

JObject实现了IDictionary,所以你可以这样使用它。 例如,

 var cycleJson = JObject.Parse(@"{""name"":""john""}"); //add surname cycleJson["surname"] = "doe"; //add a complex object cycleJson["complexObj"] = JObject.FromObject(new { id = 1, name = "test" }); 

所以最后的json会

 { "name": "john", "surname": "doe", "complexObj": { "id": 1, "name": "test" } } 

你也可以使用dynamic关键字

 dynamic cycleJson = JObject.Parse(@"{""name"":""john""}"); cycleJson.surname = "doe"; cycleJson.complexObj = JObject.FromObject(new { id = 1, name = "test" }); 

如果你有一个对象,并希望成为JObject,你可以使用:

 JObject o = (JObject)JToken.FromObject(miObjetoEspecial); 

喜欢这个 :

 Pocion pocionDeVida = new Pocion{ tipo = "vida", duracion = 32, }; JObject o = (JObject)JToken.FromObject(pocionDeVida); Console.WriteLine(o.ToString()); // {"tipo": "vida", "duracion": 32,}