是否有用于.NET的拉式JSON StreamReader解析器?

问题描述:

我需要从JSON StreamReader反序列化,而无需为该流中的每个对象实例化中间对象。是否有用于.NET的拉式JSON StreamReader解析器?

  • JSON.NET调用像JsonConvert.DeserializeObject<T>(string json, JsonConverter[] converters)
    1. 不接受StreamReader,并且
    2. 在内存中创建了一整套Newtonsoft.Json.*类的JSON structore,因为内存分析器节目。 _I'm实际上并不一定是这样的话,因为我JsonConverter小号
  • JavaScriptSerializer也似乎_不支持Stream s的一切。
    1. 甚至undocummented new JsonSerializer().Deserialize(new JsonTextReader(streamReader))

我理想中零的做法是SAXStAX式的JSON解析器。

我想理想是什么,就像是

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

的API,这将直接反序列化为T类的新实例,而不是保持所有的中间DOM的内存中的对象。

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

+0

我终于有了第一个去执行它;有关使用示例,请参阅: [https://github.com/ysharplanguage/FastJsonParser/blob/master/JsonTest/ParserTests.cs#L675](https://github.com/ysharplanguage/FastJsonParser/blob/主/ JsonTest/ParserTests.cs#L675) – YSharp 2014-04-27 00:52:29

+0

此外,请参阅其他答案和示例我给了一个相关的问题:http://*.com/a/23731522/1409653 – YSharp 2014-05-19 15:11:51

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

https://github.com/ysharplanguage/FastJsonParser

我还在忙着使其稳居第一,但如果你想给在试在得到机会之前在fork中实现它,希望能够稍微修改Obj(int outer)和Arr(int outer)方法,并向TypeInfo缓存中添加(可选)“reviver”回调委托。这将允许应用程序决定是否/何时流中的下一个对象“{...}”或数组“[...]”需要将其内容完全反序列化。

'HTH,

我发现DataReaderLitJSON,但它是相当过时的。将接受任何更好的答案。