如果您有一个JObject 或一个包含JObjects 的JArray,您只需在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");