【问题标题】:How can I serialize dynamic object to JSON in C# MVC Controller action?如何在 C# MVC 控制器操作中将动态对象序列化为 JSON?
【发布时间】:2011-10-25 21:28:28
【问题描述】:

我想将动态对象序列化为 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 格式吗?

【问题讨论】:

标签: c# asp.net-mvc json serialization


【解决方案1】:

我遇到了同样的问题,最终通过使用 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}));

【讨论】:

【解决方案2】:

这对我来说非常有效。你必须使用 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】:

    你总是可以序列化一个哈希表,它不是动态的,但它支持对象键值对。

    【讨论】:

      【解决方案4】:

      这可能对你没有用,但我有类似的要求,但使用了SerializableDynamicObject

      我将字典的名称更改为“字段”,然后使用 Json.Net 进行序列化以生成如下所示的 json:

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

      其中 Property1 和 Property2 是动态添加的属性 - 即字典键

      如果我可以摆脱封装其余部分的额外“字段”属性,那就太完美了,但我已经解决了这个限制。

      【讨论】:

      【解决方案5】:

      这将返回你想要的。

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

      【讨论】:

      • 这是一个具有 abc 属性的类。我希望该类在运行时添加属性。
      猜你喜欢
      • 1970-01-01
      • 2011-02-26
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2018-05-25
      相关资源
      最近更新 更多