簡體   English   中英

Newtonsoft.Json在序列化數組的中間添加了省略號(...)

[英]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; }
}

我創建了一個包含618個MyPoco實例的數組: 在此輸入圖像描述

生成的json總是在中間用省略號打破: 在此輸入圖像描述

結果字符串的確切解剖結構如下:

  • 字符串的第一部分是前156個MyPoco實例的成功序列化
  • 字符串的第二部分實際上是3個點(這也打破了Json語法 - 這實際上是一件好事)接着是MyPoco實例的后半部分,其基於0的索引是466
  • 字符串的第三部分是最后152個MyPoco實例的成功序列化

所以基本上,把它包起來:

  • Newtonsoft.Json成功序列化了我的數組的前156項(索引0到155)
  • 它還成功序列化了最后152個項目(索引467到617)
  • 它還成功地在結果字符串的開頭和結尾處寫入開始和結束方括號(表示數組)
  • 在這個字符串的正中間,它添加了省略號,將字符串縮減了一半,之后看起來是15,000個“健康”字符的領先群體,並且在15,000個“健康”字符的尾隨之前

問題

我不知道該怎么辦。 我可以繼續使用JavaScriptSerializer但我不想失去對Newtonsoft.Json信任。

這是主要問題。

感覺它應該是一個全面的異常崩潰,但它卻默默地失敗,這可能會給生產應用程序帶來嚴重的復雜性。

我到處尋找“最大緩沖區大小”之類的設置,找不到比已經臭名昭着的“Max Depth”設置更多的東西,因為我有一個3層樹(最深層有原始字符串),因此不是這里的情況)。

有沒有人經歷過Newtonsoft.Json這樣奇怪的行為?

更多信息

我使用了8.0.2和7.0.1 Nuget包版本(我跳過了8.0.1)。 兩個版本都表現出相同的症狀。

我的目標是.NET 4.6,我們談論的是一個空的控制台應用程序(我以最干凈的方式復制了症狀)。

編輯#1

以下是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM