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?