[英]Newtonsoft.Json adds ellipsis (…) at the middle of a serialized array
這是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調試器中右側所示省略號的快照:
好消息! 似乎畢竟沒有問題。
如果你和我一樣,你正在檢查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);
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.