Asp.net mvc 将Json.net序列化回Json

Asp.net mvc 将Json.net序列化回Json,asp.net-mvc,json.net,Asp.net Mvc,Json.net,如何获取Json.net对象并将其转换回Json字符串? 我对从rest服务获得的json数据包进行反序列化。然后我处理它,最后得到一个JObjects数组。但是,我需要将其转换回JSON字符串,以将其发送到浏览器 如果我有常规对象,那么我可以只调用JsonConvert.Serialize(),但这在Json.netJObjects上不起作用。如果你有一个JObject,或者一个JArray包含JObjects,你可以简单地在JObject上调用ToString()(或JArray)获取JSO

如何获取
Json.net
对象并将其转换回Json字符串? 我对从rest服务获得的json数据包进行反序列化。然后我处理它,最后得到一个
JObject
s数组。但是,我需要将其转换回JSON字符串,以将其发送到浏览器


如果我有常规对象,那么我可以只调用
JsonConvert.Serialize()
,但这在
Json.net
JObjects
上不起作用。如果你有一个
JObject
,或者一个
JArray
包含
JObjects
,你可以简单地在
JObject
上调用
ToString()
(或
JArray
)获取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"
  }
]
如果您有一个Jobject的常规数组,则可以将其传递给
JsonConvert.SerializeObject()

这将提供与上面所示完全相同的JSON输出

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

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

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

我刚刚注意到你问题上的ASP.NETMVC标签

如果您在MVC控制器方法中,那么您可能正在执行以下操作:

return Json(arrayOfJObjects);
string json = JsonConvert.SerializeObject(arrayOfJObjects);

return Content(json, "application/json");
这将不起作用。这是因为MVC使用
JavaScriptSerializer
,它不知道Json.Net
JObjects
。在这种情况下,您需要使用上面列出的方法之一创建Json,然后使用
内容
方法从控制器方法返回它,如下所示:

return Json(arrayOfJObjects);
string json = JsonConvert.SerializeObject(arrayOfJObjects);

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

也许JsonConvert.Serialize(JObjects.ToString())可以工作?asp.net的较新版本不使用json.net而不是
JavaScriptSerializer
?@KyleGobel Web API使用json.net,但出于向后兼容的原因,MVC仍然使用JavaScriptSerializer。