BT

Ready for InfoQ 3.0? Try the new design and let us know what you think!

JSON.NET 5のアーキテクチャ変更

| 作者: Jonathan Allen フォローする 655 人のフォロワー , 翻訳者 編集部N フォローする 0 人のフォロワー 投稿日 2013年5月16日. 推定読書時間: 2 分 |

原文(投稿日:2013/05/09)へのリンク

NewtonsoftのJSON.NETには、一組のアーキテクチャ上のアップデートがあり、サードパーティのライブラリを使うプロジェクトで、使いやすくなった。この2つのフィーチャはDefaultSettings と Extension Dataとして知られている。

JSON.NET 5r5では、開発者はJsonSerializerSettings クラスを使って、シリアライズ/デシリアライズのオプションをオーバーライドすることができる。これは通常JsonConvertメソッドに、それが呼ばれるあるいは、新しいJsonSerializerを作成するのに使われる毎に、渡される。

新しいデフォルトのスキームにオプトインしたいライブラリはJsonSerializer.CreateDefaultを使用することがでる。これは、アプリケーションがJsonConvert.DefaultSettingsメソッドを介して定義したデフォルト値を使用します。この動作を望まないライブラリは、普通にJsonSerializerのインスタンスを作成し続けることができる。

注意して欲しいのは、JsonConvert.DefaultSettingsは、JsonSerializerSettingsのインスタンスではなくFuncを受け入れることだ。 すなわちデフォルトのJsonSerializerSettingsの新しいコピーが必要な度に、生成される。

もう1つの変更は、拡張データのサポートだ。これは、生のJSONペイロードで利用可能なデータで、それ以外ではクラス構造で表現されていないデータである。通常、これはサーバー定義を変更しても、それに合わせてクライアントが更新されていない場合に発生する。

WCFでは、拡張データはIExtensibleDataObjectインターフェースを介して利用可能になる。これはタイプExtensionDataObject(殆ど役に立たない不透明なクラス)の唯一のプロパティを提供する。ExtensionDataObjectが持ちいかなるデータもデータコントラクトシリアライザー以外からは利用できない。ということは、これが使われるのは、あるデータをシリアライズし、それを古いバージョンのコードでデシリアライズし、再シリアライズし、それから元のバージョンで再びデシリアライズする、という極めて稀なケースだけだ、ということである。

JSON.Netは、文字列とJTokenオブジェクトの辞書としての拡張データを公開する。この辞書は、[JsonExtensionData]属性のタグ付きプロパティまたはフィールドを介して公開される。インターフェイスの代わりに属性を使用することにより、開発者はプライベートとしてフィールドをマークすることで、カプセル化を維持できる。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション
BT