将对象直接序列化为JObject而不是json.net中的字符串

时间:2015-10-12 18:57:01

标签: c# json serialization json.net

如何将对象直接序列化为JSON.Net中的{% if request.user|has_group:"MOM" %} <p>User belongs to my group </p> {% else %} <p>User doesn't belong to MOM</p> {% endif %} 实例?通常做的是将对象直接转换为json string ,如下所示:

JObject

然后可以反序列化返回string jsonSTRINGResult = JsonConvert.SerializeObject(someObj); ,如下所示:

JObject

这似乎有效,但似乎这种方式有双重性能影响(序列化然后反序列化)。 JObject jObj = JsonConvert.DeserializeObject<JObject>(jsonSTRINGResult); 内部使用可以某种方式访问​​的SerializeObject吗?或者有没有办法直接序列化为JObject

2 个答案:

答案 0 :(得分:35)

您可以使用FromObject

JObject静态方法
JObject jObj = JObject.FromObject(someObj)

http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Linq_JObject_FromObject.htm

答案 1 :(得分:3)

请注意,@ Eser建议的JObject路由仅适用于非数组CLR对象。如果您尝试将Array对象转换为JObject

,则会导致以下异常
  

未处理的类型&#39; System.InvalidCastException&#39;发生了   在Newtonsoft.Json.dll

     

附加信息:无法投射类型的对象   &#39; Newtonsoft.Json.Linq.JArray&#39;输入&#39; Newtonsoft.Json.Linq.JObject&#39;。

因此,如果它是一个数组对象,那么您应该使用JArray,而不是如下所示:

JArray jArray = JArray.FromObject(someArrayObject);

请在代码文件顶部添加using Newtonsoft.Json.Linq;以使用此代码段。