Für einige meiner Komponententests möchte ich die Möglichkeit haben, bestimmte JSON-Werte (in diesem Fall Alben aufnehmen) zu erstellen, die als Eingabe für das zu testende System verwendet werden können.
Ich habe folgenden Code:
var jsonObject = new JObject();
jsonObject.Add("Date", DateTime.Now);
jsonObject.Add("Album", "Me Against The World");
jsonObject.Add("Year", 1995);
jsonObject.Add("Artist", "2Pac");
Dies funktioniert gut, aber ich habe die Syntax "Magic String" nie wirklich gemocht und würde etwas bevorzugen, das der Syntax der expando-Eigenschaft in JavaScript näher kommt:
jsonObject.Date = DateTime.Now;
jsonObject.Album = "Me Against The World";
jsonObject.Year = 1995;
jsonObject.Artist = "2Pac";
Antworten:
Wie wäre es mit:
quelle
dynamic
.dynamic jsonExpando = new ExpandoObject();
JObject jsonObject = JObject.FromObject(jsonExpando);
jsonObject.list = JToken.FromObject(mylist);
.Sie können die
JObject.Parse
Operation verwenden und einfach einen durch einfache Anführungszeichen getrennten JSON-Text angeben.Dies hat den schönen Vorteil, dass es tatsächlich JSON ist und daher als JSON gelesen wird.
Oder Sie haben dynamische Testdaten, mit denen Sie die
JObject.FromObject
Operation verwenden und ein Inline-Objekt bereitstellen können.Json.net-Dokumentation zur Serialisierung
quelle
JObject.FromObject
wird nicht funktionieren, wenn es Eigenschaften mit Sonderzeichen wie gibt-
.Weder
dynamic
noch eineJObject.FromObject
Lösung funktioniert, wenn Sie JSON-Eigenschaften haben, die keine gültigen C # -Variablennamen sind, z"@odata.etag"
. Ich bevorzuge die Indexer-Initialisierer-Syntax in meinen Testfällen:Durch einen separaten Satz einschließender Symbole zum Initialisieren
JObject
und Hinzufügen von Eigenschaften sind die Indexinitialisierer besser lesbar als klassische Objektinitialisierer, insbesondere bei zusammengesetzten JSON-Objekten wie folgt:Mit der Objektinitialisierungssyntax wäre die obige Initialisierung:
quelle
Es gibt Umgebungen, in denen Sie keine dynamischen Funktionen verwenden können (z. B. Xamarin.iOS), oder Fälle, in denen Sie nur nach einer Alternative zu den zuvor gültigen Antworten suchen.
In diesen Fällen können Sie Folgendes tun:
Weitere Dokumentation hier: http://www.newtonsoft.com/json/help/html/CreatingLINQtoJSON.htm
quelle
Einfache Möglichkeit, newtonsoft JObject aus Eigenschaften zu erstellen.
Dies ist ein Beispiel für Benutzereigenschaften
und ich möchte diese Eigenschaft in newtonsoft JObject ist:
Die Ausgabe sieht folgendermaßen aus:
quelle
Früher oder später haben Sie Eigentum mit besonderem Charakter. Sie können entweder den Index oder eine Kombination aus Index und Eigenschaft verwenden.
quelle
Sie können die Newtonsoft-Bibliothek wie folgt verwenden
quelle