Ich habe einige Daten in einem C # DataSet-Objekt. Ich kann es jetzt mit einem Json.net-Konverter wie diesem serialisieren
DataSet data = new DataSet();
// do some work here to populate 'data'
string output = JsonConvert.SerializeObject(data);
Hierbei werden jedoch die Eigenschaftsnamen verwendet, die data
beim Drucken in die JSON-Datei verwendet werden. Ich möchte die Eigenschaftsnamen in etwas anderes ändern (z. B. 'foo' in 'bar' ändern).
In der Json.net-Dokumentation steht unter "Serialisieren und Deserialisieren von JSON" → "Serialisierungsattribute" "JsonPropertyAttribute ... ermöglicht das Anpassen des Namens". Aber es gibt kein Beispiel. Weiß jemand, wie man ein JsonPropertyAttribute verwendet, um den Eigenschaftsnamen in etwas anderes zu ändern?
( Direkter Link zur Dokumentation )
Die Dokumentation von Json.net scheint spärlich zu sein. Wenn Sie ein gutes Beispiel haben, werde ich versuchen, es in die offizielle Dokumentation aufzunehmen. Vielen Dank!
quelle
Antworten:
Sie können die gewünschte Eigenschaft, die ihren Namen steuert, mit dem
[JsonProperty]
Attribut dekorieren, mit dem Sie einen anderen Namen angeben können:Dokumentation: Serialisierungsattribute
quelle
[JsonProperty("FooBar")]
Wenn Sie keinen Zugriff auf die Klassen haben, um die Eigenschaften zu ändern, oder nicht immer dieselbe Umbenennungseigenschaft verwenden möchten, können Sie die Umbenennung auch durch Erstellen eines benutzerdefinierten Resolvers durchführen.
Wenn Sie beispielsweise eine Klasse
MyCustomObject
mit einer Eigenschaft namens habenLongPropertyName
, können Sie einen benutzerdefinierten Resolver wie diesen verwenden.Rufen Sie dann die Serialisierung an und liefern Sie den Resolver:
Das Ergebnis wird auf {"Short": "prop value"} anstelle von {"LongPropertyName": "prop value"} gekürzt.
Weitere Informationen zu benutzerdefinierten Resolvern finden Sie hier
quelle
DefaultContractResolver
muss in dieselbe Assembly gestellt werden, in der die Methode JsonConvert.Serialize () verwendet wird.Es gibt noch eine andere Möglichkeit, die darin besteht, eine bestimmte NamingStrategy zu verwenden , die auf eine Klasse oder eine Eigenschaft angewendet werden kann, indem sie mit
[JSonObject]
oder dekoriert werden[JsonProperty]
.Es gibt vordefinierte Namensstrategien wie
CamelCaseNamingStrategy
, aber Sie können Ihre eigenen implementieren.Die Implementierung verschiedener Namensstrategien finden Sie hier: https://github.com/JamesNK/Newtonsoft.Json/tree/master/Src/Newtonsoft.Json/Serialization
quelle