我很喜欢在运行时编译服务器端动态对象时使用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中筛选“Key”、“Value”,但我希望在向客户端发送数据之前就解决这个问题。感谢您的帮助!