带有 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 返回空数组的主要内容,如果未能解决你的问题,请参考以下文章