Ich habe eine JObject
, die als Vorlage für den Aufruf RESTful Web-Services verwendet wird. Diese JObject
wird über einen Parser erstellt und da es als Vorlage verwendet wird, die dem Benutzer sagt, wie das Endpoint-Schema aussieht, musste ich eine Möglichkeit finden, alle Eigenschaften beizubehalten. Deshalb setze ich ihre Werte auf null
. Wie als Beispiel, ist es das, was ursprünglich das Objekt wie folgt aussieht:JSON.NET serialisieren JObject beim Ignorieren Null Eigenschaften
{
"Foo":{
"P1":null,
"P2":null,
"P3":null,
"P4":{
"P1":null,
"P2":null,
"P3":null,
},
"FooArray":[
{
"F1":null,
"F2":null,
"F3":null,
}
]
},
"Bar":null
}
Der Benutzer dann in der Lage ist, in einzelne Felder zu füllen, wie sie benötigen, wie Foo.P2
und Foo.P4.P1
:
{
"Foo":{
"P1":null,
"P2":"hello world",
"P3":null,
"P4":{
"P1":1,
"P2":null,
"P3":null,
},
"FooArray":[
{
"F1":null,
"F2":null,
"F3":null,
}
]
},
"Bar":null
}
bedeutet, dass sie nur kümmern sich um diese beiden Bereiche. Jetzt möchte ich diese Vorlage (JObject
) in eine JSON-Zeichenfolge serialisieren, möchte aber nur die Felder, die ausgefüllt werden sollen. Also habe ich es versucht:
string json = JsonConvert.SerializeObject(template,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
Leider hat dies nicht funktioniert. Ich bin auf this question gestoßen und habe festgestellt, dass ein null
Wert im Objekt ein tatsächlicher JToken
Typ ist und nicht wirklich ein null
, was Sinn macht. In diesem speziellen Fall muss ich jedoch diese "unbenutzten" Felder loswerden können. Ich habe versucht, manuell über Knoten zu iterieren und sie zu entfernen, aber das hat auch nicht funktioniert. Beachten Sie, dass der einzige verwaltete Typ, den ich verwende, JObject
ist; Ich habe kein Modell, um das Objekt zu konvertieren oder Attribute zu definieren, da dieses "Template" zur Laufzeit aufgelöst wird. Ich habe mich nur gefragt, ob jemand auf ein Problem wie dieses gestoßen ist und irgendwelche Einsichten hat. Jede Hilfe wird sehr geschätzt!
Danke! Ich habe kurz nach dem Stellen der Frage einen fast ähnlichen Algorithmus gefunden, aber Ihre Antwort ist immer noch gültig :) – PoweredByOrange
Kein Problem; froh, dass ich helfen konnte. –
Ich steckte fest versucht, dies zu erreichen, danke für Ihren Beitrag, es funktioniert! –