SUtils/Serialization 1.1.0 にて MessagePack, JSON 両方に対応してみた。

関連リンク

2008/12/28 追記: リンク先を 1.1.0 から 1.1.1 へ差し替えました*1

三分で分かる?使い方

バイナリに付いている 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/ 以下からたどることが出来ます