SUtils/Serialization 1.1.0 にて MessagePack, JSON 両方に対応してみた。
関連リンク
2008/12/28 追記: リンク先を 1.1.0 から 1.1.1 へ差し替えました*1。
- バイナリダウンロード: lang/CSharp/tags/081228/SUtils/Serialization/bin
- ドキュメント類
- wiki: Serialization | SUtils Project | Assembla
- Sandcastle で生成した HTML: SUtils リファレンス
- Sandcastle で生成した chm: SUtils.chm
- 最新ソースコードとレポジトリ
関連過去エントリ
三分で分かる?使い方
バイナリに付いている XML コメントや、ソースコードだけでは難なので、使い方をざっと書いてみた。
ダウンロードしたバイナリか、ソースコードからビルドして出来た dll を参照設定した上で、以下のようなコードを書くことで、MessagePack や JSON のシリアライズ、デシリアライズが出来る。
using SUtils.Serialization; using SUtils.Serialization.MsgPack; using SUtils.Serialization.Json; SerializableValue value; ISerializationProvider serializer; // Stream へ MessagePack した値を書き込んだり、値を取り出したりする。 serializer = MsgPackSerializationProvider(); serializer.Serialize( Stream , value ); // Stream へ value を書き込む。 value = serializer.Deserialize( Stream ); // Strem から読み取る。 // Stream へ JSON でエンコードした値を書き込んだり、値を取り出したりする。 serializer = JsonSerializationProvider(); serializer.Serialize( Stream , value ); // Stream へ value を書き込む。 value = serializer.Deserialize( Stream ); // Strem から読み取る。 // SerializableValue は、数値などからの暗黙のキャストが可能。 value = 123; value = "hogehoge"; // コレクションなどの場合は、コンストラクタで変換できる。 value = new SerializableValue(new List<SerializableValue>{ "a", "b", "c" }); value = new SerializableValue(new Dictionary<SerializableValue, SerializableValue>{ { "hoge", "huga" } }); // SerializableValue の値は、明示的なキャストで取り出すことが出来る。 int num = (int)value; float fl = (float)value; string str = (string)value; // コレクションなどの場合、プロパティ経由で要素や要素数を取得できる。 var item = value["hoge"]; item = value[123]; var length = value.Length; foreach(var i in value.ArrayItems){ ... } foreach(var pair in value.MapItems){ ... } foreach(var b in value.BytesValue){ ... }
*1:古いバージョンは tags/ 以下からたどることが出来ます