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

如何在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

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

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英镑:请考虑复制你的答案。