原文出處:http://www.voidcn.com/article/p-peftggfi-bss.html
我經常需要擴展我的域模型與額外的信息,然後返回到客戶端與WebAPI。爲了避免創建ViewModel我想我可以返回JObject的附加屬性。我不能找到直接的方式將任何類型的對象轉換爲JObject與單一調用到Newtonsoft JSON庫。我想出了這樣的事情:
>第一個SerializeObject
>然後解析
>並擴展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 cycleJson = JObject.Parse(@"{""name"":""john""}");
cycleJson.surname = "doe";
cycleJson.complexObj = JObject.FromObject(new { id = 1, name = "test" });