2015-10-12 3 views
9

オブジェクトをJSON.NetのJObjectインスタンスに直接シリアル化する方法はありますか?バックJObjectに次のようにjson.netの文字列ではなくJObjectにオブジェクトを直接シリアル化する

string jsonSTRINGResult = JsonConvert.SerializeObject(someObj); 

一つの可能​​性があり、その後デシリアライズ

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

に思えるように、どのようなもの一般的に行われていることは、JSON文字列に直接オブジェクトを変換することですこの方法のように思えますが、2回のパフォーマンスがヒットします(シリアライズしてデシリアライズします)。 SerializeObjectは内部的に何とかアクセスできるJObjectを使用していますか?または、ちょうどJObjectに直接シリアル化する方法がありますか?

+1

ネイティブタイプ/クラスを使用してコード内のJObjectを操作する理由を教えてください。 –

+0

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

+0

要するに、Json.Netはハードシリアライズのすべてを処理して、私がやりたいことをいくつか行うことができます最終的なシリアライゼーションの結果はjsonには及ばない。 (これは特定の問題とは関係ありませんが)知りたいのであれば、JSON.Net XMLシリアライザ(当然)のように、属性がXMLの子要素の代わりにプロパティに使用されるようにXMLにシリアル化したい多分いくつかの他のカスタマイズ。 –

答えて

1

FromObject静的メソッドを使用することができます@Eserによって提案JObjectルートが唯一の非配列CLRオブジェクトで動作しますのでご注意ください。あなたはJObjectにArrayオブジェクトを変換しようとした場合、それは以下の例外が発生:

型「System.InvalidCastExceptionの」の未処理の例外は、Newtonsoft.Json.dll

発生しました追加情報:オブジェクトをキャストすることができません「Newtonsoft.Json.Linq.JArray」と入力して「Newtonsoft.Json.Linq.JObject」と入力してください。

ので、ケースには、以下に示すように、あなたが代わりにJArrayを使用する必要があり、配列オブジェクトである:

JArray jArray = JArray.FromObject(someArrayObject); 

このコードスニペットを使用するようにコードファイルの先頭にusing Newtonsoft.Json.Linq;を記載してください。

+0

優秀なヘッドアップ、ありがとう! –

関連する問題