卡普空(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 或更高版本环境。