在运行时编译服务器端动态对象时,我非常喜欢使用 ExpandoObject
,但是在 JSON 序列化过程中,我很难将它平坦化。首先,我实例化对象:
dynamic expando = new ExpandoObject();
var d = expando as IDictionary<string, object>;
expando.Add("SomeProp", SomeValueOrClass);
目前为止还不错。在我的 MVC 控制器中,我想把它作为一个 JsonResult 发送下来,所以我这样做:
return new JsonResult(expando);
这将 JSON 序列化为以下内容,供浏览器使用:
[{"Key":"SomeProp", "Value": SomeValueOrClass}]
但是,我真正想看到的是:
{SomeProp: SomeValueOrClass}
我知道如果我使用 dynamic
而不是 ExpandoObject
,我就可以做到这一点—— JsonResult
能够序列化 dynamic
的属性和值到一个单一的对象(没有键或值业务) ,但是我需要使用 ExpandoObject
的原因是因为直到运行时我才知道对象的所有属性,就我所知,我不能动态添加一个属性到一个 dynamic
而不使用 ExpandoObject
。
我可能需要在我的 javascript 中筛选“键”、“值”业务,但是我希望在发送给客户端之前弄清楚这一点。谢谢你的帮助!