使用Json.NET将任何types的对象转换成JObject
我经常需要在使用WebAPI将其返回给客户端之前使用其他信息扩展我的域模型。 为了避免创buildViewModel,我想我可以返回JObject的其他属性。 我不能find直接的方法来将任何types的对象转换成JObject,只需要调用Newtonsoft JSON库。 我想出了这样的事情:
- 第一个SerializeObject
- 然后parsing
- 并扩展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,}