序列化
把数据打包成字节,或者打包成 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 文本,给那些必须是 JSON 的场合——外部 API、人工编辑的文件 |
接下来看什么
快速开始 会把一个值打包成字节,把一个类型打包成 JSON。
参考文档 是两边所有成员的清单。