Ho bisogno di deserializzare json come questo (è come definito in DICOM - uno standard internazionale, quindi non posso cambiare il formato!)Come posso selezionare un tipo di oggetto per deserializzare usando Json.Net in base ai valori di proprietà nei dati
{
....
"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"
},
Ogni proprietà (di una lunga lista!) ha un nome (0008XXXX nell'esempio sopra), e ha sotto-proprietà "vr" e valore. Nella maggior parte dei casi, Value è semplicemente una matrice di oggetti (stringa o numero) e va bene, ma per 2 casi speciali (PN e SQ come sopra) ha bisogno di una gestione speciale, e nel caso di SQ è in realtà una matrice di di nuovo oggetto di livello superiore (che può essere annidato ricorsivamente all'infinito ...)
Quindi - quello di cui ho bisogno è un metodo semplice, durante la deserializzazione per ispezionare il valore "vr" e per dare a json.net il tipo che dovrebbe usare per il "Valore" associato - esiste un mezzo semplice per farlo? Ovviamente, il fatto che vr possa arrivare prima o dopo Value (a seconda dell'implementazione remota) potrebbe complicare ulteriormente le cose ...
Ho visto i meccanismi ContractResolver e JsonConverter di json.net, ma ContractResolver sembra non darmi accesso ai dati letti per permettere di fare la scelta, e le classi derivate da JsonConverter sembrerebbero lasciarmi dover ri-implementare la maggior parte di ciò che json.net è dong (altrimenti così bene!) per me già :-(
mi sto perdendo un po 'di soluzione più ovvia e semplice qui?
'JObject' è quello che ti serve. Sfortunatamente, non ho abbastanza tempo da dedicare all'impulso. –