☰
CAPCOM开源REDox:高性能.NET结构化数据引擎解析,一个Token DOM统一JSON/CBOR/MessagePack等9种格式
2026/10/5 4:37:31 网站建设 项目流程

CAPCOM开源REDox:高性能.NET结构化数据引擎解析,一个Token DOM统一JSON/CBOR/MessagePack等9种格式

【免费下载链接】REDoxHigh-performance, token-based structured data engine for .NET. A core component of REX, the technology behind CAPCOM's next-generation game engine.项目地址: https://gitcode.com/gh_mirrors/redox/REDox

REDox是 CAPCOM 为其次世代游戏引擎 "REX" 技术打造的高性能 .NET 结构化数据引擎,采用独特的Token DOM(令牌 DOM)设计,用同一套紧凑的 64 位令牌结构统一处理JSON、JSON5、CBOR、MessagePack、TOML、XML、HTML、CSV、INI共 9 种格式。它同时做到:解析速度媲美System.Text.Json的 tape DOM、可编辑能力达到JsonNode级别、灵活性比肩 Newtonsoft.Json——这正是官方基准测试中反序列化最高1.8 倍、自动并行反序列化最高2.8 倍于 System.Text.Json 的来源。🚀

一、REDox 是什么?为什么值得关注

REDox 不是"又一个 JSON 序列化库"。它把结构化数据解析为固定大小的令牌序列,这个令牌序列既是文档模型,也是所有格式共享的"结构索引层":

JSON / JSON5 / CBOR / MessagePack / TOML / XML / HTML / CSV / INI / DOX ↓ 紧凑的 Token DOM / IR(中间表示) ↓ Reader / Writer / Serializer / Deserializer ↓ .NET 对象、JSON、CBOR、MessagePack、TOML、XML、HTML、DOX……

三个通常互相冲突的目标被它同时拿下:

  • ⚡速度:tape DOM 级别的解析性能
  • ✏️可编辑:直接在文档上增删改,无需构建重型对象树
  • 🔄灵活:位置无关的$type、$id/$ref、乱序构造函数绑定(Newtonsoft.Json 的经典能力)

官方声明它是 "REX" 技术(CAPCOM 次世代游戏引擎的核心)的组成部分之一,且以Apache-2.0协议开源,要求.NET 10+。

二、核心架构:一个 64 位令牌如何统管一切

REDox 的"心脏"是位于 DToken.cs 的64 位双模式令牌。每个值都由一个固定大小的 64 位整数描述,其中 1 个扩展位决定载荷的解释方式:

  • 扩展位 = 0:载荷交由文档/格式层解释——令牌是"源数据视图",字符串、数字可以直接复用原始缓冲区切片,不急于物化
  • 扩展位 = 1:载荷解释固定由 REDox 掌控,配合控制令牌实现格式无关的编辑操作(插入 / 删除 / 替换)

令牌能表示 null、布尔、整数、浮点、字符串、二进制、时间戳、大数、数组、对象、注释/空白(trivia)等,类型枚举定义在 DTokenKind.cs。

💡 通俗理解:传统 Node DOM 每个节点都是堆上对象,内存分散、GC 压力大;REDox 把整个文档压成一条紧凑的"磁带",CPU 缓存友好,这就是它分配更少的根本原因。

可变的 Tape DOM:编辑而不重建

传统 tape DOM 是只读的(结构靠扁平序列隐式表达)。REDox 在容器视图(DArray、DObject、DMap,见 DArray.cs、DObject.cs、DMap.cs)上增加了一层间接层:值槽位可重新链接,空闲列表复用空出的令牌槽位——插入、删除、替换都不需要重建整个文档,却保留了顺序布局的缓存友好性。

不对称读写设计

读和写的需求完全不同,REDox 为两个方向设计了不同路径:

方向策略为什么
序列化通过DataWriter单趟直写输出缓冲值已知,无需前瞻,无需中间 DOM
反序列化先构建 Token DOM,再通过DataReader按令牌 id 随机访问结构未知,需要前瞻、乱序绑定、上下文查询

正因为反序列化时整个结构"一次性可见",REDox 才能做到:

  • 数组/集合预分配正确大小
  • $type出现在对象的任何位置都能被解析
  • 构造参数乱序收集、一次性绑定(支持 record 与主构造函数)
  • 用整篇文档上下文解析$id/$ref引用环
  • 自动选择顺序或并行反序列化
  • 字符串、数字按需解码,不变的源切片直接复用

相关抽象见 Serialization 目录(DataReader/DataWriter/DataConverter<T>)。

三、性能表现:基准测试数据一览

官方基准(BenchmarkDotNet,.NET 10,AMD Ryzen Threadripper PRO 5975WX)显示,相对 System.Text.Json:

数据集反序列化并行反序列化序列化
canada.json(数值密集,约 2.2 MB)1.68x2.84x1.06x
citm_catalog.json1.77x2.25x1.62x
twitter.json1.36x2.34x1.42x

内存分配同样可观:canada.json反序列化 REDox 约分配2.56 MB,而 System.Text.Json 约8.53 MB(约为 1/3)。

📌 注意:这些比值仅针对基准数据集,不是通用性能保证——官方也建议"用自己的负载做基准测试"。测试数据(simdjson-data、JSONTestSuite等)以子模块形式位于 external/ 目录。

四、9 种格式统一接入,跨格式转换一行搞定

各格式以独立 NuGet 包提供(包名CAPCOM.REDox.*前缀,命名空间REDox.*):

包名状态说明
CAPCOM.REDox公开核心 + JSON + JSON5 + DOX + 通用序列化基础设施
CAPCOM.REDox.Cbor/.MessagePack/.Ini/.Dynamic公开CBOR、MessagePack、INI 集成 / dynamic 访问
CAPCOM.REDox.Serialization.SystemTextJson/.NewtonsoftJson预览两大主流 JSON 库的兼容层
CAPCOM.REDox.Serialization.DataContractJson公开DataContractJsonSerializer 兼容层
CAPCOM.REDox.Toml/.Xml/.Html/.Csv预览TOML、XML、HTML、CSV 支持

因为共享同一 Token IR,跨格式转换变得极其简单——官方示例(见 README.md 的"Cross-format conversion"一节):

JSON5 → Token IR → JSON JSON → Token IR → CBOR CBOR → Token IR → MessagePack TOML → Token IR → JSON

解析入口如 JsonDocument.cs、CborDocument.cs、MessagePackDocument.cs 都提供Parse/Encode等成对 API,解析成文档模型后即可用另一种格式重新编码。

五、进阶特性速览

1. 自动并行反序列化 🔢

反序列化器会检查每个数组的元素数与令牌范围:足够大就并行,太小就顺序执行,避免调度开销。阈值可配置,默认值见 ParallelDeserializeOptions.cs:

var settings = new DoxSerializerSettings { ParallelOptions = new ParallelDeserializeOptions { ParallelDeserializeEnabled = true, MinimumNumberOfElements = 1024, MinimumNumberOfTokens = 4096 } }; var players = JsonSerializer.Deserialize<Player[]>(json, settings);

2. JSON5 注释与 Trivia 保留 ✏️

解析 JSON5 时开启PreserveTrivia,注释、空白等"琐碎信息"能在编辑文档后依然保留并重新编码——对配置文件的原地改写场景非常实用。入口见 Json5Document.cs。

3. NDJSON / JSON 序列异步流式读取 🌊

JsonSequence可以异步流式读取 NDJSON 或超大顶层数组,逐值产出、不全量加载内存,适合日志、事件流场景(见 JsonSequence.cs 与 JsonStreamTest.cs)。

4. dynamic 访问 🧩

REDox.Dynamic包提供DDynamic,用 C# 的dynamic语法直接读写令牌 DOM(如player.name),还能动态构建对象再序列化,见 DDynamic.cs。

5. DOX 格式与深克隆 📦

DOX 是镜像内存令牌布局的二进制格式,从 DOX 重建文档几乎不需要结构重建,因此天然适合做基于序列化的深克隆——得到的是独立可编辑副本而非共享只读视图,见 DoxSerializer.cs。

6. 三大主流序列化器兼容层 🔁

存量项目可以直接把现有的JsonSerializerOptions/JsonSerializerSettings/DataContractJsonSerializerSettings适配进 REDox(兼容层分别位于 REDox.Serialization.SystemTextJson、REDox.Serialization.NewtonsoftJson、REDox.Serialization.DataContractJson),迁移成本大幅降低。

六、快速上手:安装与 30 秒体验

dotnet add package CAPCOM.REDox dotnet add package CAPCOM.REDox.Cbor dotnet add package CAPCOM.REDox.MessagePack

预览包需加--prerelease(如dotnet add package CAPCOM.REDox.Toml --prerelease)。

核心用法一以贯之——同一个 API 表面完成序列化、反序列化、解析、编辑:

using REDox.Json; var json = JsonSerializer.Serialize(player); // 序列化 var restored = JsonSerializer.Deserialize<Player>(json); // 反序列化 using var doc = JsonDocument.Parse(json); // 解析为 Token DOM var root = doc.RootElement.AsObject(); root["Name"] = "Claire"; // 替换 root.Add("Hp", 100); // 新增 root.Remove("Level"); // 删除 var edited = doc.RootElement.ToJsonString(); // 重新编码

想从源码构建与跑测试:

git clone --recurse-submodules https://gitcode.com/gh_mirrors/redox/REDox cd REDox dotnet build REDox.slnx -c Release dotnet test REDox.slnx -c Release dotnet run -c Release --project benchmarks/REDox.Json.Benchmarks

七、仓库结构导览 🗂️

路径内容
src/REDox/核心引擎:令牌(DToken.cs)、文档(Document.cs)、容器视图、Serialization(转换器、元数据属性)
src/REDox/Json/JSON / JSON5 解析、写入、序列器
src/REDox.Cbor/、src/REDox.MessagePack/CBOR、MessagePack 集成
src/REDox.Toml/、src/REDox.Xml/、src/REDox.Html/、src/REDox.Ini/、src/REDox.Csv/各预览/公开格式组件
tests/全量测试,含各格式兼容性测试
benchmarks/BenchmarkDotNet 基准(JSON、CBOR、MessagePack、Dynamic)
external/第三方测试数据(JSONTestSuite、toml-test 等,git 子模块)

八、总结:谁应该关注 REDox?

✅该用它的场景:

  • 追求极致性能与低 GC 压力的 .NET 数据管道(游戏、服务端高频 IO)
  • 需要跨格式互转(如 CBOR ⇄ JSON ⇄ MessagePack)的系统
  • 想原地编辑 JSON/JSON5 并保留注释的配置工具
  • 存量 Newtonsoft.Json / System.Text.Json 项目想平滑提速

⚠️需要权衡的:项目处于活跃开发期,预览组件 API 可能变化;要求 .NET 10+。

REDox 用"一个 64 位令牌"把解析、编辑、格式互转、并行反序列化统一到同一数据模型上,是 .NET 生态中目前少有的"格式无关结构化数据引擎"。对数据格式打交道多的开发者,值得把它加进技术雷达 📡。

【免费下载链接】REDoxHigh-performance, token-based structured data engine for .NET. A core component of REX, the technology behind CAPCOM's next-generation game engine.项目地址: https://gitcode.com/gh_mirrors/redox/REDox

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询