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

Nic*_*sen 29 c# serialization json json.net

如何将对象直接序列化为JObjectJSON.Net中的实例?通常做的是将对象直接转换为json 字符串,如下所示:

string jsonSTRINGResult = JsonConvert.SerializeObject(someObj);
Run Code Online (Sandbox Code Playgroud)

然后,可以反序列化是回JObject如下:

JObject jObj = JsonConvert.DeserializeObject<JObject>(jsonSTRINGResult);
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但似乎这种方式有双重性能影响(序列化然后反序列化).SerializeObject内部是否使用JObject可以某种方式访问​​的?或者有没有办法直接序列化为JObject

Ese*_*ser 43

你可以使用FromObject静态方法JObject

JObject jObj = JObject.FromObject(someObj)
Run Code Online (Sandbox Code Playgroud)

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


fra*_*ers 11

要组合所有内容:将 JToken 用于所有内容(对象和数组)。

JToken token = JToken.FromObject(someObjectOrArray);
Run Code Online (Sandbox Code Playgroud)

然后检查它是通过token.Type哪个JTokenType(对象、数组或其他)。


RBT*_*RBT 8

请注意,JObject@ Eser建议的路由仅适用于非数组CLR对象。如果尝试将Array对象转换为,则会导致以下异常JObject

Newtonsoft.Json.dll中发生了'System.InvalidCastException'类型的未处理异常

附加信息:无法将类型为“ Newtonsoft.Json.Linq.JArray”的对象转换为类型为“ Newtonsoft.Json.Linq.JObject”的对象。

因此,如果它是一个数组对象,则应使用JArray如下所示的方法:

JArray jArray = JArray.FromObject(someArrayObject);
Run Code Online (Sandbox Code Playgroud)

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