Deserialisieren Sie mithilfe von System.Text.Json in ein Wörterbuch, bei dem die Groß-/Kleinschreibung nicht berücksicht

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Deserialisieren Sie mithilfe von System.Text.Json in ein Wörterbuch, bei dem die Groß-/Kleinschreibung nicht berücksicht

by Guest » 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:

Code: Select all

class  DictionaryTest
{
public Dictionary Fields { get; set; }
public DictionaryTest()
{
Fields = new Dictionary(StringComparer.OrdinalIgnoreCase);
}
}
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.

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}");
Image

Image
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.

Top