In addition to Jon Skeet's comment, you want to add that you can partially control this behavior:
var settings = new JsonSerializerSettings() {
ObjectCreationHandling = ObjectCreationHandling.Replace
};
Console.WriteLine(JsonConvert.DeserializeObject<ColorList>(json, settings).Colors.Count);
However, even if you use it ObjectCreationHandling.Reusewith an array, it will not reuse it, but will replace it anyway (well, in any case, it will not be able to reuse it).
Since you wrote that you were expecting a new collection during deserialization, this might help you.
source
share