我正在寻找一个在低级别上支持 JSON(反)序列化或高度可定制的框架。
我必须序列化的许多对象模型类型必须以特定方式创建,并且并非所有信息都可用于通用解析器。目前我对大多数类型使用带有 JSONConverters 的 JSON.Net,但类型的实例化很棘手而且不是很干净(具有 JSONConstructor 属性的私有构造函数 + 提供剩余构造数据的构造后初始化方法)。
简而言之,OR-Mapper 对我来说并不理想,因为:
- 对象不是 POCO(没有默认构造函数,解析器中并非所有构造函数信息都可用)
- 某些类型可以表达得比 OR-Mapper 创建的更紧凑和可读(例如,值类型对可以存储为
{"theType" : "theValue"}
而不是{"type": "theType", "value" : "theValue"}
- 这里的区别主要是可读性) - 难以支持对领域模型的更改;我需要使用旧解析器将遗留数据解析为旧 POCO,将它们转换为当前 POCO 并使用当前解析器进行序列化(至少我假设这就是使用 OR-mappers 完成的方式)
当我编写所有 JSONConverters 时,我意识到提供低级序列化方法(WriteProperty、ReadValue、WriteObject)的框架对我来说就足够了,并且还提供了创建更紧凑、可读的 JSON 的灵活性,并允许我为不同的具有很少开销的域模型版本(与需要遗留域对象进行 ORM 解析相比)。
是否有任何框架支持低级/高度定制的 JSON 解析? 我宁愿自己不编写这样的解析器,尽管我认为它不会那么困难,因为 JSON 是一种简单的格式(尽管日期解析等可能会让人头疼)。
JSON.Net 的 JsonReader/Writer 类型基本上是我正在寻找的,但我不确定以这种方式使用这些类型是否是一个好主意。如果有其他库在提供此功能方面做得更好——JSON.Net 毕竟旨在用作 ORM 解析器。