如何使用Json.NET将任何类型的对象转换为JObject?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (1105)

我需要使用WebAPI将其返回给客户端之前使用其他信息扩展我的域模型。为了不用创建ViewModel,我想我可以返回具有其他属性的JObject。但我无法找到直接的方法来将任何类型的对象转换为JObject,只需调用Newtonsoft JSON库即可。我想出了这样的事情:

  1. SerializeObject
  2. 然后解析
  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,}

扫码关注云+社区

领取腾讯云代金券