如何在C#MVC控制器操作中将动态对象序列化为JSON?
我想将动态对象序列化为JSON。我尝试使用ExpandoObject,但结果不是我所需要的:如何在C#MVC控制器操作中将动态对象序列化为JSON?,c#,asp.net-mvc,json,serialization,C#,Asp.net Mvc,Json,Serialization,我想将动态对象序列化为JSON。我尝试使用ExpandoObject,但结果不是我所需要的: public JsonResult Edit() { dynamic o = new ExpandoObject(); ((IDictionary<string,Object>)o)["abc"] = "ABC"; //or o.abc = "ABC"; return Json(o); } publicjsonresult编辑() { 动态o=新的Exp
public JsonResult Edit()
{
dynamic o = new ExpandoObject();
((IDictionary<string,Object>)o)["abc"] = "ABC"; //or o.abc = "ABC";
return Json(o);
}
publicjsonresult编辑()
{
动态o=新的ExpandooObject();
((i词典)o)[“abc”]=“abc”;//或o.abc=“abc”;
返回Json(o);
}
我希望JSON看起来像:{“abc”:“abc”},但它看起来像[{“Key”:“abc”,“Value”:“abc”}]
显然ExpandoObject不会这样做,但是我可以从DynamicObject继承并以某种方式重写其方法以实现我想要的JSON格式吗?这将返回您想要的内容
public JsonResult Edit()
{
return Json(new {abc = "ABC"});
}
这可能对您没有用处,但我有类似的要求,但使用了 我将字典的名称更改为“Fields”,然后使用Json.Net进行序列化以生成Json,如下所示:
{"Fields":{"Property1":"Value1", "Property2":"Value2" etc.
其中Property1和Property2是动态添加的属性,即字典键
如果我可以去掉封装其余部分的额外“Fields”属性,那就太好了,但我已经克服了这个限制。您可以一直序列化哈希表,它不是动态的,但支持对象键值对。这对我来说非常有效。您必须使用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;
}
[HttpGet]
公共字符串GetJson()
{
列表=新列表();
列表属性=新列表();
对于(int i=0;i<10;i++)
{
添加(新数据项{Column=“Column”+i.ToString(),Value=“Value”+i.ToString()});
}
添加(properties.ToDictionary(x=>x.Column,y=>y.Value));
string test=JsonConvert.SerializeObject(列表);
回归试验;
}
我遇到了同样的问题,并最终通过使用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}));
//在我的使用中,我有一个动态对象列表
var输出=新列表();
//改变这个
返回JsonContent(新的{Error=errorMessage,Results=output});
//对此
返回内容(JsonConvert.SerializeObject(新的{Error=errorMessage,Results=output}));
答案是根据:@JoeTuskan顺便说一句,值得投票来结束这样的事情这是一个具有abc属性的类。我想让这个类在运行时添加属性。你能把这个移到VTC上吗?我甚至会在交易中投进1英镑:请考虑复制你的答案。