Ich versuche, ein Wörterbuch serialisieren/deserialisieren, das Problem ist, dass ich das Wörterbuch mit einem StringComparer.OrdinalIgnoreCase
Vergleich erstellen.Deserialize JSON Dictionary mit StringComparer
Hier ist ein Code-Snippet des Problems Ich erlebe:
var dict = new Dictionary<string, Dictionary<string, string>>(StringComparer.OrdinalIgnoreCase);
dict["x"] = new Dictionary<string, string>();
dict["x"]["y"] = "something";
var serialized = JsonConvert.SerializeObject(dict);
var unSerialized = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(serialized);
Console.WriteLine((dict.Comparer == unSerialized.Comparer ? "Same" : "Different"));
Druckt die folgenden auf der Konsole:
Different
Offensichtlich ist die Der JSON-Serializer serialisiert den Comparer, den ich beim Erstellen des Wörterbuchs eingerichtet habe, nicht, aber das Problem kann ich nicht einstellen Der Comparer nach der Tat seit Dictionary<TKey, TValue>.Comparer
ist schreibgeschützt.
Ich bin mir sicher, dass es mit einigen benutzerdefinierten JsonSerializerSetting
zu tun hat, aber ich kann nicht herausfinden, wie man die Sammlungserstellung abfangen und ein Wörterbuch mit einem anderen Vergleich zurückgeben.
OK Nehmen wir an, Sie schicken diesen JSON an eine andere Seite. Wie kann es wissen, wie Sie dieses Wörterbuch erstellt haben (Sie können sogar andere Methoden ohne jedes Wörterbuch verwenden, um dasselbe json zu erstellen) –
@ L.B Diese Anwendung ist nicht webbasiert, ich verwende JSON für die Serialisierung über XML aus anderen geschäftlichen Gründen. Die Daten werden nicht von einem externen System verarbeitet. –
Es ist nur ein Beispiel, um die Logik zu erklären. Empfänger des JSON hat keine Ahnung, wie Sie es erstellt haben. Es kennt nicht einmal die Sprache, mit der Sie es erstellt haben. Sie machen also falsche Annahmen –