gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:42:31 25 4
gpt4 key购买 nike

在运行时编译服务器端动态对象时,我真的很喜欢 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com