web-dev-qa-db-ja.com

json.netの文字列ではなく、JObjectに直接オブジェクトをシリアル化します

JSON.NetでJObjectインスタンスにオブジェクトを直接シリアル化するにはどうすればよいですか?通常行われるのは、オブジェクトをjson stringに直接変換することです。

string jsonSTRINGResult = JsonConvert.SerializeObject(someObj);

次のようにdeserializeJObjectに戻すことができます:

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

それはうまくいくように思えますが、この方法ではパフォーマンスが2倍になります(シリアライズしてからデシリアライズ)。 SerializeObjectは内部で何らかの方法でアクセスできるJObjectを使用していますか?または、JObjectに直接シリアル化する方法はありますか?

24

FromObjectJObject静的メソッドを使用できます

JObject jObj = JObject.FromObject(someObj)

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

40
Eser

@Eserによって提案されたJObjectルートは、非配列CLRオブジェクトに対してのみ機能することに注意してください。 ArrayオブジェクトをJObjectに変換しようとすると、以下の例外が発生します。

Newtonsoft.Json.dllで「System.InvalidCastException」タイプの未処理の例外が発生しました

追加情報:「Newtonsoft.Json.Linq.JArray」タイプのオブジェクトを「Newtonsoft.Json.Linq.JObject」タイプにキャストできません。

したがって、配列オブジェクトの場合は、次に示すように、代わりにJArrayを使用する必要があります。

JArray jArray = JArray.FromObject(someArrayObject);

このコードスニペットを使用するには、コードファイルの先頭にusing Newtonsoft.Json.Linq;を含めてください。

8
RBT