这是Newtonsoft.Json
序列化功能的一种非常奇怪的行为。我几乎尝试过所有事情(例如我没有继续使用.NET Reflector逐步完成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; }
}
结果字符串的确切解剖结构为:
MyPoco
实例MyPoco
实例的后半部分,基于0的索引是466 MyPoco
实例基本上,把它包起来:
Newtonsoft.Json
成功序列化了我的数组的前156项(索引0到155)我不知道该怎么办。我可以继续使用JavaScriptSerializer
,但我不想失去对Newtonsoft.Json
的信任。
这是主要问题。
感觉它应该因全面的异常而崩溃,但它会默默地失败,这可能会给生产应用带来严重的复杂性。
我到处寻找“最大缓冲区大小”之类的设置,找不到比已经臭名昭着的“Max Depth”设置更多的东西,因为我有一个3层树(原始字符串在最深的一层)。
有没有人经历过Newtonsoft.Json
这种奇怪的行为?
我使用了8.0.2和7.0.1 Nuget包版本(我跳过了8.0.1)。 两个版本都表现出相同的症状。
我的目标是.NET 4.6,我们正在谈论一个空的控制台应用程序(我以最干净的方式复制了这些症状)。
下面是Visual Studio调试器中的省略号快照:
答案 0 :(得分:6)
如果你和我一样,你正在检查json
变量,然后复制其内容并粘贴到其他地方进行验证。
事情是:Visual Studio正在开始添加省略号然后结束内容。
如果您将其写入文件,则它是完整且有效的JSON!
var lines = new MyPoco[6000];
for (int i = 0; i < lines.Length; i++)
{
lines[i] = new MyPoco
{
op = "Concatenate" + i,
left = "Integer",
right = "String",
result = "String",
};
}
var json = JsonConvert.SerializeObject(lines, Formatting.Indented);
File.WriteAllText("JsonNet.json", json);
var json2 = new JavaScriptSerializer().Serialize(lines);
File.WriteAllText("JavaScriptSerializer.json", json2);
希望它有所帮助!