【问题标题】:Serialize Json.net back to JSON将 Json.net 序列化回 JSON
【发布时间】:2016-04-23 03:14:38
【问题描述】:

如何获取Json.net 对象并将其转回json 字符串? 我反序列化从休息服务获得的 json 数据包。然后我处理它并最终得到一个JObjects 的数组。但是接下来我需要将其转回 JSON 字符串发送到浏览器。

如果我有常规对象,那么我可以调用 JsonConvert.Serialize(),但这不适用于 Json.net JObjects

【问题讨论】:

  • 也许 JsonConvert.Serialize(JObjects.ToString()) 会起作用?

标签: asp.net-mvc json.net


【解决方案1】:

如果您有一个JObject 或一个包含JObjectsJArray,您只需在JObject(或JArray)上调用ToString() 即可获取JSON 字符串。例如:

JObject jo = new JObject();
jo.Add("foo", "bar");
jo.Add("fizz", "buzz");

JObject jo2 = new JObject();
jo2.Add("foo", "baz");
jo2.Add("fizz", "bang");

JArray ja = new JArray();
ja.Add(jo);
ja.Add(jo2);

string json = ja.ToString();
Console.WriteLine(json);

生成的 JSON 输出:

[
  {
    "foo": "bar",
    "fizz": "buzz"
  },
  {
    "foo": "baz",
    "fizz": "bang"
  }
]

如果你有一个常规的 JObjects 数组,你可以将它传递给JsonConvert.SerializeObject()

JObject[] arrayOfJObjects = new JObject[] { jo, jo2 };
json = JsonConvert.SerializeObject(arrayOfJObjects, Formatting.Indented);
Console.WriteLine(json);

这给出了与上面所示完全相同的 JSON 输出。

JsonConvert.SerializeObject() 也可以在单个 JObject 上正常工作:

json = JsonConvert.SerializeObject(jo, Formatting.Indented);
Console.WriteLine(json);

输出:

{
  "foo": "bar",
  "fizz": "buzz"
}

编辑

我刚刚注意到您问题上的 ASP.NET MVC 标签。

如果你在 MVC 控制器方法中,那么大概你正在做这样的事情:

return Json(arrayOfJObjects);

这是行不通的。这是因为 MVC 使用了 JavaScriptSerializer,它不知道 Json.Net JObjects。在这种情况下,您需要做的是使用我上面列出的方法之一创建 JSON,然后使用 Content 方法从控制器方法返回它,如下所示:

string json = JsonConvert.SerializeObject(arrayOfJObjects);

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

【讨论】:

  • 不要较新版本的 asp.net 使用 json.net 而不是 JavaScriptSerializer
  • @KyleGobel Web API 使用 Json.Net,但 MVC 出于向后兼容的原因仍然使用 JavaScriptSerializer。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
相关资源
最近更新 更多