序列化

把数据打包成字节,或者打包成 JSON——两者都是薄薄地包了一层 Udon 本来就有的东西,而不是重新造一遍。

更新于 2026-09-11

两种互不相关的打包方式,都是薄封装而不是重新实现:字节用 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 位及以下的标量、stringbyte[]Vector2Vector3Quaternion。这不是 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。

参考文档 是两边所有成员的清单。

出了点问题 重新加载