带有 JObject 元素的 C# JsonResult 返回空数组

Posted

技术标签:

【中文标题】带有 JObject 元素的 C# JsonResult 返回空数组【英文标题】:C# JsonResult with JObject element returns empty array 【发布时间】:2019-01-10 18:24:17 【问题描述】:

我正在尝试从包含 JsonObject 作为元素的 REST API 返回 JSON 结果。

var aJsonObject = new JObject();
aJsonObject.Add("somefield", "somevalue" );
aJsonObject.Add("someotherfield", 1995);

return Json( new  status = "success", result = aJsonObject  );

客户端收到一个空的嵌套数组:

"status":"success","result":[[[]],[[]]]

我不喜欢的解决方法是序列化 JsonObject,从而将其作为字符串发送,然后让客户端对其进行解析。它可以工作,但它有点难看。

这是一个错误还是我做错了?

注意:2018 年 8 月 3 日我编辑了变量声明以更正一个错字 - 它是 jsonObject,应该是 aJsonObject

【问题讨论】:

你给出的例子和你的结果,根本不匹配。 为什么要返回 JObject 而不是对象? 你为什么要声明jsonObject 但填充并返回aJsonObject?您只是在混淆变量吗? @ozum.e 我需要它是动态的 - 在运行时我不会知道我要添加到对象的字段,所以我不能声明一个类来制作 POCO。 @DanWilson 抱歉 - 这是错字...我重命名对象和变量是为了发布问题以避免发布真实代码。我更正了帖子并记下了我对其进行了编辑。 【参考方案1】:

JObject 已经是 json 格式。 JsonResult 的主要目的是将对象序列化为 json。你想要做的是(我猜):

dynamic resultObject = new ExpandoObject();
resultObject.somefield = "somevalue";
resultObject.someotherfield = 1995;

return Json( new  status = "success", result = resultObject  );

如果您想自己构建 Json 字符串并将其返回给客户端,您可以使用 Content:

return new Content(yourjsonstring, "application/json");

【讨论】:

【参考方案2】:

如果你想继续使用 JObject,这可行(然后按照@ozum.e 的描述返回 JSON):

var jObject = new JObject();
jObject.Add("someField", "someValue");
jObject.Add("otherField", 1995);
var newObj = new  status = "success", result = jObject ;
var returnThis = JsonConvert.SerializeObject(newObj);

【讨论】:

以上是关于带有 JObject 元素的 C# JsonResult 返回空数组的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用dynamic类型来访问JObject对象

JObject.Parse c#

无法在 c# 中访问 jObject 令牌

在 C# 中向 JObject 添加匿名或对象属性

升级到 .NET 4.0 后 C# 动态 JObject 不起作用

C#中jobject 命名空间的啥