Ich habe einen Fehler ausfindig gemacht und festgestellt, dass Newtonsoft JSON Elemente an eine List<>
anfügt, die im Standardkonstruktor initialisiert wurde. Ich habe ein wenig mehr gegraben und mit einigen Leuten über den C# -Chat gesprochen und festgestellt, dass dieses Verhalten nicht für alle anderen Sammlungstypen gilt.Erklärung für ObjectCreationHandling mit Newtonsoft JSON?
https://dotnetfiddle.net/ikNyiT
using System;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Collections.ObjectModel;
public class TestClass
{
public Collection<string> Collection = new Collection<string>(new [] { "ABC", "DEF" });
public List<string> List = new List<string>(new [] { "ABC", "DEF" });
public ReadOnlyCollection<string> ReadOnlyCollection = new ReadOnlyCollection<string>(new [] { "ABC", "DEF" });
}
public class Program
{
public static void Main()
{
var serialized = @"{
Collection: [ 'Goodbye', 'AOL' ],
List: [ 'Goodbye', 'AOL' ],
ReadOnlyCollection: [ 'Goodbye', 'AOL' ]
}";
var testObj = JsonConvert.DeserializeObject<TestClass>(serialized);
Console.WriteLine("testObj.Collection: " + string.Join(",", testObj.Collection));
Console.WriteLine("testObj.List: " + string.Join(",", testObj.List));
Console.WriteLine("testObj.ReadOnlyCollection: " + string.Join(",", testObj.ReadOnlyCollection));
}
}
Ausgang:
testObj.Collection: ABC,DEF
testObj.List: ABC,DEF,Goodbye,AOL
testObj.ReadOnlyCollection: Goodbye,AOL
Wie Sie die Collection<>
Eigenschaft ist unbeeinflusst von der Deserialisierung sehen kann, wird die List<>
angehängt und ReadOnlyCollection<>
ersetzt wird. Ist das beabsichtigtes Verhalten? Was war die Begründung?
Ich vermute, die Antwort wäre "nur weil", auch wäre es interessant zu wissen, ob es einen Grund für Verhalten für List/Collection (ReadOnlyCollection Verhalten ist aus meiner Sicht etwas selbsterklärend). Randnotiz: Erwähnen Sie die Aktualisierung des Titels, um genauer zu sein - "neugierig" ist etwas schwer zu erraten, wenn man dies anhand des Problems finden möchte ... –
@AlexeiLevenkov - Ich habe einige Probleme, herauszufinden, die Nuance zwischen ReadOnlyCollection und Collection. Das Problem scheint mit der ObjectCreationHandling-Einstellung zu sein und so habe ich das zum Titel hinzugefügt. –
Dieses Problem wurde auch im [C# chat room] (http://chat.stackoverflow.com/transcript/message/20857312#20857312) diskutiert. –