1

我正在寻找一个在低级别上支持 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 解析器。

4

2 回答 2

1

我们为 JSON 使用了这个java 库,它是非常可配置的。我们将它移植到 C#。:)

于 2013-02-04T12:11:17.783 回答
0

为了结束这个问题,我会自己发布一个答案,尽管如果 Soundararajan 有机会完成他的计划并提供他的实施,我会接受他的答案。

我最终暂时使用了 JSON.Net 的 JsonReader/Writer 类型。

一旦/如果性能成为问题,我将切换到支持 SAX-like parsing的 protobuf-net 。

If someone knows a better library for highly customizable / SAX-like JSON serialization, feel free to leave an answer, I'll still watch this question.

于 2013-07-30T10:11:53.087 回答