シリアライゼーション
データをバイト列にも JSON にも詰められます。どちらも Udon がすでに持っている仕組みの上に乗っているだけで、作り直したものではありません。
無関係な二つの詰め方を、どちらも作り直しではなく薄いラッパーとして。バイト列には ByteWriter/ByteReader、テキストには Json。
using Udonite.Serialization;
byte[] payload = new ByteWriter().WriteInt32(7).WriteString("hi").ToArray();
string json = Json.Serialize(dictionaryOrIJsonSerializable);
バイト列を扱うのは、Udon に自前のシリアライザーがないからです。 ByteWriter/ByteReader は Udon のネットワーク層がそのまま扱える型だけを対象にしています——32 ビット以下のスカラー、string、byte[]、Vector2、Vector3、Quaternion。System.BitConverter をそのまま写したものではなく、意図的に絞った核だけです。reached なクラスは丸ごとコンパイルされ、宣言したメソッドはプログラムが生きている間ずっとヒープを食うので、ここにあるのはペイロードが実際に運びそうなものだけです。
JSON を扱うのは、Udon にすでにそれがあるからです。 Json は Udon 自身のパーサーである VRCJson をラップしているだけで、二つ目のパーサーを作ってはいません。呼び出す側のほとんどから VRChat の内部の仕組みである DataToken を隠します。型は IJsonSerializable を実装することで参加し、あとは Json.Serialize<T>/Deserialize<T> がやってくれます。
何が入っているか
| 型 | 用途 |
|---|---|
ByteWriter, ByteReader |
byte[] への詰め込み——メッセージのペイロード、保存フォーマット、形を自分で決められるもの全般 |
Json, IJsonSerializable |
JSON テキストへの詰め込み——外部 API や、人が手で編集するファイルなど、JSON でなければならないもの |
次に読むもの
はじめかた では値をバイト列に、型を JSON に詰めてみます。
リファレンス は両方のメンバー一覧です。