这是一个非常奇怪的行为Newtonsoft.Json
的序列化功能。我几乎尝试了所有方法(例如,我没有继续使用 .NET Reflector 一步步完成Newtonsoft.Json.dll
汇编的算法)。
Symptoms
情况如下:
我有一个小的 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; }
}
I create an array of 618 MyPoco
instances:
The resulting json is always broken at the middle by an ellipsis:
结果字符串的确切结构是这样的:
- 字符串的第一部分是成功序列化的前156
MyPoco
实例
- 字符串的第二部分实际上是 3 个点(这也破坏了 Json 语法 - 这实际上是一件好事),后面是后半部分
MyPoco
基于 0 的索引为 466 的实例
- 字符串的第三部分是最后152的成功序列化
MyPoco
实例
基本上,总结一下:
-
Newtonsoft.Json
已成功序列化数组的前 156 个项目(索引 0 到 155)
- 它还成功序列化了最后 152 个项目(索引 467 到 617)
- 它还成功地将左方括号和右方括号(代表数组)写入结果字符串的开头和结尾
- 在此字符串的中间,它添加了省略号,将字符串切成两半,位于前导一堆 15,000 个“健康”字符之后和尾随一堆 15,000 个“健康”字符之前
Problem
我不知道该怎么办。我可以继续使用JavaScriptSerializer
但我不想失去对Newtonsoft.Json
.
这是主要问题。
感觉它应该因全面异常而崩溃,但它却默默地失败了,这可能会给生产应用程序带来严重的复杂性。
我到处寻找“最大缓冲区大小”之类的设置,但找不到比已经臭名昭著的“最大深度”设置更多的东西,但这里的情况并非如此,因为我有一个 3 层树(最深层有原始字符串) )。
有没有人经历过这种奇怪的行为Newtonsoft.Json
?
更多信息
我使用了 8.0.2 和 7.0.1 Nuget 包版本(我跳过了 8.0.1)。
两个版本都表现出相同的症状。
我的目标是 .NET 4.6,我们正在讨论一个空的控制台应用程序(我以尽可能干净的方式复制了症状)。
EDIT #1
下面是在 Visual Studio 调试器中看到的省略号的快照: