
卡普空(CAPCOM)正式推出 RE:Dox,这是一款专为 .NET 平台打造的高性能结构化数据引擎。作为卡普空下一代游戏引擎核心组件 'REX' Technology 的一部分,RE:Dox 并非传统的 JSON 序列化器,而是通过将结构化数据解析为紧凑、固定大小的标记 DOM / 中间表示(IR),实现高效的读取、编辑、格式转换及自动并行反序列化。
核心优势:速度与灵活性的平衡
RE:Dox 旨在解决传统方案中相互冲突的性能目标,融合了以下三大特性:
- 磁带 DOM 的解析速度:媲美
System.Text.Json.JsonDocument; - 节点 DOM 的可编辑性:具备
System.Text.Json.Nodes.JsonNode的灵活操作能力; - Newtonsoft.Json 的兼容性:支持位置无关的
$type、$id/$ref及无序构造函数绑定。
在基准测试中,RE:Dox 展现出显著的性能优势:
- 极速序列化/反序列化:顺序反序列化速度最高提升约 1.8倍,自动并行反序列化速度最高提升约 2.8倍;序列化速度较 System.Text.Json 快约 1.6倍。
- 极低内存分配:以处理
canada.json为例,RE:Dox 仅分配约 2.56 MB 内存,而 System.Text.Json 需约 8.53 MB。 - 跨格式统一模型:通过
DataConverter<T>抽象,实现格式无关的数据转换。目前核心集成 JSON、JSON5、CBOR、MessagePack、INI 和 DOX;TOML、XML、HTML 和 CSV 处于预览阶段。 - 可变标记 DOM:支持直接编辑对象和数组,无需替换为重量级托管对象树,且能在 JSON5 编辑中保留注释等琐碎信息(Trivia)。
架构创新:64位双模式标记
RE:Dox 的核心在于其独特的 64位双模式标记 设计。每个值由固定大小的 64 位标记描述,通过扩展位决定载荷解释方式:
- 扩展位 = 0:载荷解释委托给文档/格式层,重用源数据切片,避免急于实例化;
- 扩展位 = 1:载荷解释由 RE:Dox 固定,启用控制标记,支持格式无关的插入、删除和替换操作。
这种设计实现了不对称的读写路径:
- 写路径(序列化):单遍处理,直接写入输出缓冲区,无需构建中间 DOM;
- 读路径(反序列化):先构建紧凑的标记 DOM,支持随机访问、前瞻解析、无序参数绑定及
$id/$ref循环解析,并可自动选择顺序或并行处理。
快速入门与生态
RE:Dox 采用 Apache-2.0 许可协议,NuGet 包 ID 以 CAPCOM.REDox.* 为前缀。开发者可通过以下命令安装核心包:
dotnet add package CAPCOM.REDox
以下示例展示了其统一的 API 表面,支持序列化、解析及就地编辑:
using REDox.Json;
var player = new Player { Name = "Leon", Level = 42, Items = ["Handgun"] };
// 序列化 / 反序列化
var json = JsonSerializer.Serialize(player);
var restored = JsonSerializer.Deserialize<Player>(json);
// 解析为标记 DOM 并就地编辑
using var doc = JsonDocument.Parse(json);
var root = doc.RootElement.AsObject();
root["Name"] = "Claire"; // 替换
root.Add("Hp", 100); // 添加
root.Remove("Level"); // 移除
此外,RE:Dox 支持 自动并行反序列化,当数组元素足够大时,会自动在并行线程中处理,同时小数组保持顺序处理以避免调度开销。对于需要保留注释的场景,JSON5 编辑器可在重新编码后完整保留注释信息。
目前,RE:Dox 正处于积极开发阶段,API 及预览格式支持可能在稳定版发布前发生调整。该引擎要求 .NET 10 或更高版本环境。