c# - 如何在asp.net mvc中展平通过JsonResult返回的ExpandoObject

在运行时编译服务器端动态对象时,我真的很喜欢 ExpandoObject,但是在 JSON 序列化过程中我无法将其展平。首先,我实例化对象:

dynamic expando = new ExpandoObject();
var d = expando as IDictionary<string, object>;
expando.Add("SomeProp", SomeValueOrClass);

到目前为止一切顺利。在我的 MVC Controller 中,我想将它作为 JsonResult 发送下来,所以我这样做:

return new JsonResult(expando);

这会将 JSON 序列化为以下内容,供浏览器使用:

[{"Key":"SomeProp", "Value": SomeValueOrClass}]

但是,我真正想看到的是:

{SomeProp: SomeValueOrClass}

我知道如果我使用 dynamic 而不是 ExpandoObject 可以实现这一点 -- JsonResult 能够序列化 dynamic 属性和值到单个对象中(没有 Key 或 Value 业务),但我需要使用 ExpandoObject 的原因是因为我不知道我想要的所有属性在对象上直到运行时,据我所知,如果不使用 ExpandoObject,我无法将属性动态添加到 dynamic

我可能需要在我的 javascript 中筛选“Key”、“Value”业务,但我希望在将其发送给客户之前弄清楚这一点。感谢您的帮助!

最佳答案

使用 JSON.NET,您可以调用 SerializeObject 来“展平”expando 对象:

dynamic expando = new ExpandoObject();
expando.name = "John Smith";
expando.age = 30;

var json = JsonConvert.SerializeObject(expando);

将输出:

{"name":"John Smith","age":30}

在 ASP.NET MVC Controller 的上下文中,可以使用 Content-method 返回结果:

public class JsonController : Controller
{
    public ActionResult Data()
    {
        dynamic expando = new ExpandoObject();
        expando.name = "John Smith";
        expando.age = 30;

        var json = JsonConvert.SerializeObject(expando);

        return Content(json, "application/json");
    }
}

关于c# - 如何在asp.net mvc中展平通过JsonResult返回的ExpandoObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5156664/

相关文章:

c# - 从 .NET 控制台调用 JSON WebService 的最佳方式

json - 如何在屏幕上显示 JSON 表示而不是 [Object Object]

python - JSON 值错误 : Expecting property name: line

python - 如何从 Python 中的文件/流中懒惰地读取多个 JSON 值?

javascript - 在 JSON 中,为什么要引用每个名称?

json - JSON中的反序列化和序列化是什么?

javascript - JSON.parse 与 eval()

mysql - MYSQL 5.7 中的原生 JSON 支持 : what are the pros

python - JSON中的单引号和双引号

.net - 您的项目未引用 ".NETFramework,Version=v4.5"框架。