Einer der API-Endpunkte gibt komplexe Objekte zurück, Beispiel:< /p>
// ComplexResource is defined in the nuget package and is annotated with Newtonsoft
public class ComplexResource
{
[JsonProperty("uuid")]
public Guid Uuid;
[JsonProperty("child_resources")]
public Dictionary ChildResources;
}
Das ChildResources Dictionary ist wie folgt aufgebaut:
- Der Schlüssel ist der Name des Typs (z. B. PlanResource)
- Der Wert selbst ist ein weiterer komplexer Typ, einer von
< li>Im Falle mehrerer Elemente ein JArray mit einigen weiteren JObject items - Im Falle eines einzelnen Elements ein JObject
Hier beginnt der Spaß. Ich möchte alle ChildResources-Elemente in die Darstellung jedes Elements in meiner Lösung deserialisieren (z. B.PlanResource). Das PlanResource-Objekt in meiner Lösung ist korrekt mit System.Text.Json-Attributen annotiert (z. B. JsonPropertyName).
Leider kann ich keine Möglichkeit finden Um dies zu tun, ohne die Werte des Wörterbuchs wieder in JSON zu reserialisieren, Beispiel:
// Step 0: Get value from dictionary
var complexResource = ... uses nuget package, returns ComplexResource ...
var resourceData = complexResource.ChildResources["PlanResource"];
// Step 1: Serialize back out **with Newtonsoft**
var jsonString = JsonConvert.SerializeObject(resourceData);
// Step 2: Deserialize **with System.Text.Json**
var actualResource = JsonSerializer.Deserialize(jsonString);
// Step 3: Operate on PlanResource as normal
actualResource.LastUpdated = ...
Dies scheint ineffizient zu sein und erfordert viel Serialisierung und Deserialisierung.
Gibt es eine direktere Möglichkeit, diese Objekte zu konvertieren, ohne etwas zu schreiben? Benutzerdefinierter Mapper für jeden einzelnen Ressourcentyp?
Mobile version