这是一个关于
我创建了一个包含618个
结果的 json 总是被省略号中断:
结果字符串的确切构成如下:
这是主要问题。
感觉应该会崩溃并抛出全面的异常,但它却默默地失败了,这可能会在生产应用程序中引起严重的问题。
我已经到处寻找类似 "Max Buffer Size" 的设置,但除了已经臭名昭著的 "Max Depth" 设置外,什么也没有找到,而这里并不适用,因为我有一个3层树(最深层是原始字符串)。
有人曾经遇到过
我针对 .NET 4.6,我们正在谈论一个空的控制台应用程序(我尽可能地复制了这些症状)。
这是在Visual Studio调试器中看到的省略号的快照:
Newtonsoft.Json
序列化功能的非常奇怪的行为。我已经尝试了几乎所有方法(例如,我没有使用.NET反编译器逐步遍历Newtonsoft.Json.dll
程序集的算法)。
症状
情况如下:
我有一个小的POCO类,包含4个字符串属性:
public class MyPoco {
public string op { get; set; }
public string left { get; set; }
public string right { get; set; }
public string result { get; set; }
}
我创建了一个包含618个
MyPoco
实例的数组:![enter image description here](https://istack.dev59.com/tmynq.webp)
![enter image description here](https://istack.dev59.com/0cmNJ.webp)
- 字符串的第一部分是前156个
MyPoco
实例的成功序列化。 - 字符串的第二部分是三个点(这也破坏了 Json 语法 - 实际上这是一件好事),后面跟着索引为466的最后半部分
MyPoco
实例。 - 字符串的第三部分是最后152个
MyPoco
实例的成功序列化。
Newtonsoft.Json
成功地序列化了数组的前156个项目(从索引0到155)。- 它还成功地序列化了最后152个项目(从索引467到617)。
- 它也成功地在生成的字符串开头和结尾处写入了表示数组的方括号。
- 在该字符串的中心位置,它添加了一个省略号,将字符串切成两半,在出现大约15,000个“健康”字符之后,再跟着15,000个“健康”的字符。
问题
我不知道该怎么办。我可以继续使用JavaScriptSerializer
,但我不想失去对 Newtonsoft.Json
的信任。这是主要问题。
感觉应该会崩溃并抛出全面的异常,但它却默默地失败了,这可能会在生产应用程序中引起严重的问题。
我已经到处寻找类似 "Max Buffer Size" 的设置,但除了已经臭名昭著的 "Max Depth" 设置外,什么也没有找到,而这里并不适用,因为我有一个3层树(最深层是原始字符串)。
有人曾经遇到过
Newtonsoft.Json
的这种奇怪行为吗?
更多信息
我使用了8.0.2和7.0.1 Nuget包版本(跳过了8.0.1)。 两个版本都表现出相同的症状。我针对 .NET 4.6,我们正在谈论一个空的控制台应用程序(我尽可能地复制了这些症状)。
这是在Visual Studio调试器中看到的省略号的快照:
![enter image description here](https://istack.dev59.com/tvRTC.webp)