Ich brauche json so deserialisieren (es ist wie in DICOM definiert - einem internationalen Standard, also kann ich nicht das Format ändern!Wie kann ich einen Objekttyp auswählen Json.Net deserialisieren in den Daten basierend auf Eigenschaftswerte
){
....
"00080060": {
"Value": [
"US"
],
"vr": "CS"
},
"00080070": {
"Value": [
"ACME Products"
],
"vr": "LO"
},
"00080090": {
"Value": [
{
"AlphabeticName": "Better^Make^U.^MD"
}
],
"vr": "PN"
},
"00081110": {
"Value": [
{
"00080008": {
"Value": [
"XX_0",
"OIU",
null,
"PPP"
],
"vr": "CS"
}
},
{},
{
"00080008": {
"Value": [
"XX_2",
"OIU",
null,
"PPP"
],
"vr": "CS"
}
}
],
"vr": "SQ"
},
Jede Eigenschaft (in einer langen Liste!) hat einen Namen (0008XXXX in obigem Beispiel), und Untereigenschaften "vr" und Wert hat. In den meisten Fällen ist Value einfach ein Array von Objekten (String oder Zahl) und das ist in Ordnung, aber für 2 Spezialfälle (PN und SQ wie oben) benötigt es spezielle Behandlung, und im Falle von SQ ist es tatsächlich ein Array von Top-Level-Objekt wieder (die verschachtelt ad infinitum verschachtelt werden können ...)
Also - was ich brauche, ist eine einfache Methode, während der Deserialisierung den Wert "vr" zu überprüfen und json.net geben den Typ, den es verwenden soll für den damit verbundenen "Wert" - gibt es ein einfaches Mittel, das zu tun? Natürlich, dass die Tatsache, vr vor oder nach dem Wert kommen könnte (abhängig von der Remote-Implementierung) könnte die Dinge weiter komplizieren ...
I ContractResolver und JsonConverter die bei json.net Mechanismen hat gesucht, aber ContractResolver scheint mir nicht zu geben Zugriff auf die gelesenen Daten, um die Auswahl zu ermöglichen, und von JsonConverter abgeleitete Klassen würden mich dazu bringen, das meiste von dem, was json.net dong (sonst so gut!) ist, für mich schon wieder umzusetzen :-(
bin ich hier einige offensichtliche und einfache Lösung fehlt?
'JObject' ist das, was Sie brauchen. Leider habe ich nicht genug Zeit, um das Parsen damit zu erzwingen. –