簡體   English   中英

如何在 C# MVC Z9BBF373797BF7CF7BA662C80023682 動作中將動態 object 序列化為 JSON?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM