【问题标题】:C# JsonResult with JObject element returns empty array带有 JObject 元素的 C# JsonResult 返回空数组
【发布时间】: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 抱歉 - 这是错字...我重命名对象和变量是为了发布问题以避免发布真实代码。我更正了帖子并记下了我对其进行了编辑。

标签: c# json asp.net-mvc-4


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多