![](/img/trans.png)
[英]How can I serialize an object as Json adding as root the name of the object class in a desktop C# app?
[英]How can I serialize dynamic object to JSON in C# MVC Controller action?
我想將動態 object 序列化為 JSON。 我嘗試使用 ExpandoObject,但結果不是我需要的:
public JsonResult Edit()
{
dynamic o = new ExpandoObject();
((IDictionary<string,Object>)o)["abc"] = "ABC"; //or o.abc = "ABC";
return Json(o);
}
我希望 JSON 看起來像: {"abc": "ABC"} 但它看起來像 [{"Key":"abc","Value":"ABC"}] 顯然 ExpandoObject 不會做,但我可以繼承從 DynamicObject 並以某種方式覆蓋其方法以實現我想要的 JSON 格式?
我遇到了同樣的問題,最終通過使用 JSON.net (Newtonsoft.Json) 序列化程序而不是使用 JsonContent 結果來修復它。 然后它用普通屬性序列化我的動態對象,而不是“鍵”“值”怪異列表。
//In my usage I had a list of dynamic objects
var output = new List<dynamic>();
//Change this
return JsonContent(new {Error = errorMessage, Results = output});
//to this
return Content(JsonConvert.SerializeObject(new {Error = errorMessage, Results = output}));
這可能對您沒有用,但我有類似的要求,但使用了SerializableDynamicObject
我將字典的名稱更改為“字段”,然后使用 Json.Net 進行序列化以生成 json,如下所示:
{"Fields":{"Property1":"Value1", "Property2":"Value2" etc.
其中 Property1 和 Property2 是動態添加的屬性 - 即字典鍵
如果我能擺脫封裝 rest 的額外“字段”屬性,那將是完美的,但我已經解決了這個限制。
這將返回你想要的。
public JsonResult Edit()
{
return Json(new {abc = "ABC"});
}
您始終可以序列化 HashTable,它不是動態的,但它支持 object 鍵值對。
這對我來說非常有效。 您必須使用 Json.NET。
[HttpGet]
public string GetJson()
{
List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
List<DataEntry> properties = new List<DataEntry>();
for (int i = 0; i < 10; i++)
{
properties.Add(new DataEntry { Column = "column" + i.ToString(), Value = "value" + i.ToString() });
}
list.Add(properties.ToDictionary(x => x.Column, y => y.Value));
string test = JsonConvert.SerializeObject(list);
return test;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.