JSON.NET serialisiert JObject, ignoriert dabei Null-Eigenschaften

Ich habe einJObject welches als @ verwendet wiVorlag zum Aufrufen von RESTful-Webdiensten. DiesJObject wird über einen Parser erstellt und da es als Vorlage verwendet wird, die dem Benutzer sagt, wie das Endpunktschema aussieht, musste ich eine Möglichkeit finden, alle Eigenschaften beizubehalten. Aus diesem Grund verwende ich standardmäßig die Werte null. Als Beispiel sieht das Objekt ursprünglich so aus:

{  
   "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 kann dann nach Bedarf einzelne Felder ausfüllen, z. B.Foo.P2 undFoo.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, sie kümmern sich nur um diese beiden Felder. Jetzt möchte ich diese Vorlage serialisieren JObject) zurück zu einer JSON-Zeichenfolge, es sollen jedoch nur die Felder angezeigt werden, die mit Daten gefüllt sind. Also habe ich folgendes versucht:

string json = JsonConvert.SerializeObject(template,
    new JsonSerializerSettings
    {
        NullValueHandling = NullValueHandling.Ignore
    });

Leider hat das nicht funktioniert. Ich bin auf @ gestoßdiese Frag und erkannte, dass einnull Wert im Objekt ist ein tatsächlichesJToken Typ und nicht wirklich einnull, was Sinn macht. In diesem speziellen Fall muss ich jedoch in der Lage sein, diese "unbenutzten" Felder loszuwerden. Ich habe versucht, Knoten manuell zu durchlaufen und zu entfernen, aber das hat auch nicht funktioniert. Beachten Sie, dass der einzige verwaltete Typ, den ich verwende, @ isJObject; Ich habe kein Modell, um das Objekt zu konvertieren oder Attribute zu definieren, da diese "Vorlage" zur Laufzeit aufgelöst wird. Ich habe mich nur gefragt, ob jemand auf ein solches Problem gestoßen ist und irgendwelche Einsichten hat. Jede Hilfe wird sehr geschätzt!

Antworten auf die Frage(6)

Ihre Antwort auf die Frage