Deserialisieren Sie mithilfe von System.Text.Json in ein Wörterbuch, bei dem die Groß-/Kleinschreibung nicht berücksicht
Posted: 03 Jan 2025, 07:57
Ich versuche, JSON in ein Objekt mit einer Eigenschaft vom Typ Dictionary zu deserialisieren. Ich gebe den Vergleicher für das Wörterbuch als StringComparer.OrdinalIgnoreCase an.
Hier ist diese Klasse:
Aber wenn die Deserialisierung erfolgt, wird der Vergleich zum generischen geändert. Daher kann ich nicht ohne Berücksichtigung der Groß-/Kleinschreibung auf die Schlüssel meines Wörterbuchs zugreifen.


Wie kann ich also JSON deserialisieren? eine Klasse wie die folgende und pflegen Sie diese Groß- und Kleinschreibung? Irgendwelche Vorschläge? Ich verwende .net5.
Und ich sollte erwähnen, dass dieser Code mit Newtonsoft perfekt funktionieren würde. Der Vergleicher bleibt OrdinalIgnoreCase und die Groß-/Kleinschreibung wird beibehalten.
Hier ist diese Klasse:
Code: Select all
class DictionaryTest
{
public Dictionary Fields { get; set; }
public DictionaryTest()
{
Fields = new Dictionary(StringComparer.OrdinalIgnoreCase);
}
}
Code: Select all
var points = new Dictionary
{
{ "James", "9001" },
{ "Jo", "3474" },
{ "Jess", "11926" }
};
var testObj = new DictionaryTest{Fields = points};
var dictionaryJsonText = JsonSerializer.Deserialize(JsonSerializer.Serialize(testObj, options:new JsonSerializerOptions()
{
IgnoreNullValues = true,
WriteIndented = false,
PropertyNamingPolicy = null,
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
PropertyNameCaseInsensitive = true
}));
string nameJsonText = "", nameJsonText2="";
//Because of the naming policy specified above, the keys are camelCase.
//So keys are james, jo and jess
//I expect to be able to access either james, or James as keys.
dictionaryJsonText?.Fields.TryGetValue("James", out nameJsonText);
dictionaryJsonText?.Fields.TryGetValue("james", out nameJsonText2);
Console.WriteLine($"Name with system.text.json is: {nameJsonText}");
Console.WriteLine($"Name with system.text.json is: {nameJsonText2}");
Console.WriteLine($"Comparer is {dictionaryJsonText?.Fields.Comparer}");


Wie kann ich also JSON deserialisieren? eine Klasse wie die folgende und pflegen Sie diese Groß- und Kleinschreibung? Irgendwelche Vorschläge? Ich verwende .net5.
Und ich sollte erwähnen, dass dieser Code mit Newtonsoft perfekt funktionieren würde. Der Vergleicher bleibt OrdinalIgnoreCase und die Groß-/Kleinschreibung wird beibehalten.