将对象直接序列化为jobobject,而不是json中的字符串

本文关键字:json 字符串 对象 序列化 jobobject | 更新日期: 2023-09-27 18:17:15

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

string jsonSTRINGResult = JsonConvert.SerializeObject(someObj);

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

JObject jObj = JsonConvert.DeserializeObject<JObject>(jsonSTRINGResult);

这似乎是可行的,但这种方式似乎有双重性能打击(序列化,然后反序列化)。是否SerializeObject内部使用JObject可以访问某种方式?或者有没有办法直接序列化到JObject ?

将对象直接序列化为jobobject,而不是json中的字符串

可以使用JObjectFromObject静态方法

JObject jObj = JObject.FromObject(someObj)
http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Linq_JObject_FromObject.htm

请注意,Eser接受的答案中建议的JObject路由将仅对非数组CLR对象起作用。如果您尝试将Array对象转换为JObject,则会导致以下异常:

类型为"System"的未处理异常。InvalidCastException的发生在Newtonsoft.Json.dll

附加信息:无法强制转换类型的对象"Newtonsoft.Json.Linq。

如果它是一个数组对象,那么您应该使用JArray,如下面的代码片段所示:
using Newtonsoft.Json.Linq;
JArray jArray = JArray.FromObject(someArrayObject);

使用JToken来组合所有内容(对象和数组)

JToken token = JToken.FromObject(someObjectOrArray);

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