1

我需要从 JSON 反序列StreamReader化,而不为该流中的每个对象实例化中间对象。

  • JSON.NET像这样调用JsonConvert.DeserializeObject<T>(string json, JsonConverter[] converters)
    1. 不接受StreamReader,并且
    2. Newtonsoft.Json.*如内存分析器所示,在内存中为 JSON结构创建整个类集。_我实际上不确定是不是这样,因为我JsonConverter的 _
  • JavaScriptSerializer似乎也根本不支持Streams。
    1. 甚至没有记录new JsonSerializer().Deserialize(new JsonTextReader(streamReader))

我想要的零方法是SAXStAX样式的 JSON 解析器。

理想情况下,我想要的是一个类似的 API

object JsonCooler.DeserializeObject<T>(
  StreamReader jsonStream, Converter[] converters)

它将直接反序列化为 class 的新实例T,而不是将其所有中间类 DOM 对象保留在内存中。

这样的解串器存在吗?或者我在概念层面缺少什么?

4

2 回答 2

1

我怀疑这是一个越来越频繁的用例。我正在考虑通过这个小工具支持它一段时间,我也努力保持简短和快速:

https://github.com/ysharplanguage/FastJsonParser

我仍然忙于首先使其稳定,但是如果您想在我有机会之前尝试在分叉中实现它,希望这足以稍微修改 Obj(int external) 和 Arr(int external ) 方法,以及向 TypeInfo 缓存添加(可选)“reviver”回调委托。这将允许应用程序决定流中的下一个对象“{ ... }”或数组“[ ... ]”是否/何时需要完全反序列化其内容。

'HTH,

于 2013-12-24T02:28:07.843 回答
0

DataReaderLitJSON中找到了一个,但它已经过时了。将接受任何更好的答案。

于 2013-02-21T12:51:12.443 回答