4
考慮下面的代碼:Newtonsoft.JSON:JSON列表和數組處理方式不同
public class ColorList
{
public List<string> Colors = new List<string>(new string[1] { "#eeeeee"});
}
public class ColorArray
{
public string[] Colors = new string[1] { "#eeeeee"};
}
public class Program
{
public static void Main()
{
string json = "{Colors:['#abc','#123']}";
// Deserialize Colors into List:
Console.WriteLine(JsonConvert.DeserializeObject<ColorList>(json).Colors.Count);
// returns 3
// Deserialize Colors into Array:
Console.WriteLine(JsonConvert.DeserializeObject<ColorArray>(json).Colors.Length);
// returns 2
}
}
爲什麼會出現兩個deserializations之間的差異?
聽起來就像它添加到列表(因爲它可以),但取代整個數組(因爲它不能做任何其他事情,但我猜它可能會複製原始值)。如果你只是改變你的代碼,以便新創建的對象沒有任何條目,你應該沒問題。 –
我試過你的代碼和@JonSkeet似乎是正確的。在列表中,添加新值不是問題,但是在數組中,您必須重新創建它,因爲一旦它具有不能(容易)重新維度的維度。無論如何,這對我來說確實是一種意想不到的行爲,因爲我預計在反序列化時會出現一個新的集合。 – Pikoh
串行器和解串器不是反函數嗎?序列化程序和反序列化程序是否被認爲是一個錯誤? – Alexander