哪个框架最好支持高度可定制的JSON序列化?

时间:2013-02-04 11:15:55

标签: c# json serialization

我正在寻找一个支持低级别JSON(de-)序列化的框架,或者是高度可定制的。

必须以特定方式创建我必须序列化的对象模型的许多类型,并且并非所有信息都可用于通用解析器。 目前我正在使用JSON.Net和大多数类型的JSONConverters,但是类型的实例化是棘手的并且不是很干净(具有JSONConstructor属性的私有构造函数+提供剩余构造数据的构造后初始化方法)。

简而言之,OR-Mapper对我来说并不理想,因为:

  • 对象不是POCO(没有默认构造函数,不是解析器中可用的所有构造函数信息)
  • 某些类型可以表达得比OR-Mapper创建的更紧凑和可读(例如,值类型对可以存储为{"theType" : "theValue"}而不是{"type": "theType", "value" : "theValue"} - 这里的区别主要是可读性)
  • 很难支持对域模型的更改;我需要使用旧的解析器将遗留数据解析为旧的POCO,将它们转换为curernt POCO并使用当前解析器进行序列化(至少我假设它是如何使用OR-mappers完成的)

当我编写所​​有JSONConverters时,我意识到提供低级序列化方法(WriteProperty,ReadValue,WriteObject)的框架对我来说已足够,并且还可以灵活地创建更紧凑,可读的JSON并允许我 为域模型的不同版本创建迁移器,只需很少的开销(与需要用于ORM解析的旧域对象相比)。

是否有任何框架支持低级/高度自定义的JSON解析? 我不想自己编写这样的解析器,尽管我认为它不会那么困难,因为JSON是一种简单的格式(虽然Date解析等可能会让人头疼)。

JSON.Net的JsonReader / Writer类型基本上是我正在寻找的,但我不确定以这种方式使用这些类型是否是一个好主意。如果有其他库在提供此功能方面做得更好 - JSON.Net毕竟打算用作ORM解析器。

2 个答案:

答案 0 :(得分:1)

我们将此java library用于极其可配置的JSON。我们把它移植到C#但是。 :)

答案 1 :(得分:0)

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

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

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

如果有人知道一个更好的库可用于高度可定制/类似SAX的JSON序列化,请随时留下答案,我仍然会看到这个问题。