Json.Net - 匿名类型的部分反序列化

时间:2018-06-15 03:30:28

标签: json.net

在简要检查了这个source code后,似乎Json.Net的JsonConvert.DeserializeAnonymousType方法从头到尾解析整个JSON输入,即使指定的匿名类型只有一个匹配的属性输入的开头,即使输入长度为5GB(夸大问题)。

此外,CheckAdditionalContent属性似乎仅适用于对象结束后显示的内容;即,错误的JSON语法和/或意外数据。

我没有找到会导致部分阅读的设置;即,在输入中发现所有属性时停止读取。

要明确的是,我希望在指定匿名类型时,类似于this partial deserialization example的行为是默认行为。

原因很简单:

  1. 我无法控制服务中的JSON来源(来自第三方)。
  2. 内容通常比我实际需要的内容大100倍(例如,我只需要读取1个属性,但内容中有100个属性)。
  3. 性能是我最重要的因素。我知道最糟糕的表现仍然类似于阅读整个对象,但在很多情况下,你可以非常自信地不会阅读大部分对象;例如,如果我只需要读取ID属性,并且在我的服务收到的每个JSON输入中,ID属性就是对象中的第一个!
  4. 当然,显而易见的替代方法是不使用Anonymous Type重载;但是,我问这个问题,因为它是关于预期的行为。无论如何,从语法上讲,我非常喜欢这种方法而不是替代方法。

    我错了,或者在将匿名类型指定为合同时,Json.Net实际上是否总是反序列化整个输入?

0 个答案:

没有答案