2011-08-12 15 views
11

我想將動態對象序列化爲JSON。我試着用ExpandoObject,但結果不是我所需要的:如何在C#MVC Controller操作中將動態對象序列化爲JSON?

public JsonResult Edit() 
{ 
    dynamic o = new ExpandoObject(); 
    ((IDictionary<string,Object>)o)["abc"] = "ABC"; //or o.abc = "ABC"; 
    return Json(o); 
} 

我想JSON的樣子:{「ABC」:「ABC」},而是它看起來像[{「關鍵」:「ABC 「,」Value「:」ABC「}] 顯然ExpandoObject不會這樣做,但是我可以從DynamicObject繼承並以某種方式重寫它的方法來實現我想要的JSON格式?

+1

答案是根據扁平化:http://stackoverflow.com/questions/5156664/how-to-flatten-an-expandoobject-returned-via-jsonresult-in-asp-net-mvc – Joe

+0

@ JoeTuskan btw它值得投票結束這樣的事情 –

回答

1

這將返回你想要的。

public JsonResult Edit() 
{ 
    return Json(new {abc = "ABC"}); 
} 
+3

這是一個abc屬性的類。我想讓這個類在運行時添加屬性。 – panpawel

3

這可能不是對你有用,但我也有類似的要求,但使用SerializableDynamicObject

我改變了詞典「字段」的名稱,然後用這個序列化Json.Net到產生JSON它看起來像:

{"Fields":{"Property1":"Value1", "Property2":"Value2" etc. 

其中動態添加Property1和Property2性質 - 即字典鍵

這將是perfec如果我可以擺脫封裝其餘的額外「Fields」屬性,但我已經解決了這個限制。

+1

你可以移動到http://stackoverflow.com/questions/5156664/how-to-flatten-an-expandoobject-returned-via-jsonresult-in-asp-net-mvc和VTC這個請嗎?我甚至會在交易中輸入一個+1:D –

+1

完成 - 移動和VTC – BonyT

0

你總是可以序列化一個HashTable,它不是動態的,但它支持對象鍵值對。

0

這對我來說非常合適。你必須使用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; 
    } 
3

我有同樣的問題,並最終通過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})); 
+0

請考慮複製您的答案到http://stackoverflow.com/questions/5156664/how-to-flatten-an-expandoobject-returned -via-jsonresult式-ASP淨MVC – ProfNimrod