如何在C#MVC Controller操作中将动态对象序列化为JSON?

我想将动态对象序列化为JSON。 我尝试使用ExpandoObject,但结果不是我需要的:

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

我希望JSON看起来像:{“abc”:“ABC”}但它看起来像[{“Key”:“abc”,“Value”:“ABC”}]显然ExpandoObject不会这样做,但我可以inheritance从DynamicObject以某种方式覆盖其方法来实现我想要的JSON格式?

我有同样的问题,最后通过使用JSON.net(Newtonsoft.Json)序列化程序而不是使用JsonContent结果来修复它。 然后它使用普通属性与“key”“value”怪异列表序列化我的动态对象。

 //In my usage I had a list of dynamic objects var output = new List(); //Change this return JsonContent(new {Error = errorMessage, Results = output}); //to this return Content(JsonConvert.SerializeObject(new {Error = errorMessage, Results = output})); 

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

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

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

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

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

这将返回你想要的。

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

您始终可以序列化HashTable,它不是动态的,但它支持对象键值对。

这对我很有用。 你必须使用Json.NET。

  [HttpGet] public string GetJson() { List> list = new List>(); List properties = new List(); 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; }