Ich verwende die Json.Net Newtonsoft Komponente während meines Projekts bei der Arbeit.Newtonsoft Json.Net - Wie vermeidet man die Verwendung von Json-Eigenschaften?
Von Zeit zu Zeit stolpere ich in die Implementierungsdetails der Bibliothek. Wenn ich zum Beispiel den Wert der JProperty abrufe, muss ich die Eigenschaft .Value verwenden:
var displaySettings = options.DisplaySettings.Value;
Dies ist ärgerlich, da man sich daran erinnern muss, dass die Eigenschaften eines gegebenen dynamischen Objekts tatsächlich von der "Value" -Eigenschaft abgerufen werden können, ohne dessen Typ zur Laufzeit zu kennen. (Und zusätzlich gibt es mehr Linq-Code, um den "Wert" zu wählen, der den Code verstopft)
Gibt es eine Möglichkeit, das Json-Objekt einfach zu umbrechen oder vielleicht die Newtonsoft-Komponente richtiger zu verwenden?
Ich sehe, ich bin immer nach unten gestimmt, aber ich denke, es gibt ein Problem mit JObject Verkapselung ist.
Wenn ich "var" verwende, um die Bool-Variable zu speichern, würde der Test fehlschlagen, weil die Variable JValue-Objekt enthalten wird.
[Test]
public void TestProperties()
{
dynamic testee = JsonConvert.DeserializeObject(@"
{
TestBool:true
}
");
var result = testee.TestBool;
Assert.That(result, Is.EqualTo(true));
}
Dieser Test wird passieren: Wahre Aber war:
Erwartet:
Assert.That(result.Value, Is.EqualTo(true));
Der Test in Folge wird
auch zu beweisen, auf dass dies nicht NUnit ist ausgabe:
dynamic testee = JsonConvert.DeserializeObject(@"
{
TestBool:true
}
");
var result = testee.TestBool;
if (result)
{
Assert.Pass();
return;
}
Das obige wird Ausnahme auf "wenn" -Klausel auslösen.
Ich frage mich, ob es bei stackoverflow eine gängige Praxis ist, Menschen zu stimmen, ohne nach einer Klärung zu fragen. Nette Kultur. (Ich kann nehmen, dass einige der Menschen neu zu bestimmten Technologie Fragen überhaupt zu fragen, entmutigt würden)
Danke, AD
Sie können festlegen, stark typisierte Klassen und deserialisieren in denen anstelle der Verwendung dynamischer zu handhaben. –