2016-05-06 7 views
0

Ich mag dieses ein JSON-Objektfür jeden Schlüsselwert eine JSON-Datei mit verschiedenen Objekttypen Deserialisieren

{ 
    "UrbanSourceUnsealedRoad": 
    [ 
    { 
     "Name": "Baseflow Total Nitrogen Standard Deviation (log mg/L)", 
     "Min": "1", 
     "Max": "2", 
     "Default": "3", 
     "AlwaysInReport": "FALSE", 
     "Flag": "YES" 
    }, 
    { 
     "Name": "Stormflow Total Nitrogen Mean (log mg/L)", 
     "Min": "4", 
     "Max": "5", 
     "Default": "6", 
     "AlwaysInReport": "FALSE", 
     "Flag": "YES" 
    }, 
    ... 
    ], 
    "UrbanSourceSealedRoad": 
    [ 
    { 
     "Name": "Baseflow Total Nitrogen Standard Deviation (log mg/L)", 
     "Min": "1", 
     "Max": "2", 
     "Default": "3", 
     "AlwaysInReport": "FALSE", 
     "Flag": "YES" 
    }, 
    { 
     "Name": "Stormflow Total Nitrogen Mean (log mg/L)", 
     "Min": "4", 
     "Max": "5", 
     "Default": "6", 
     "AlwaysInReport": "FALSE", 
     "Flag": "YES" 
    }, 
    ... 
    ], 
    ... 
} 

habe ich

dies mit JSON.net in C# deserialised haben
JsonConvert.DeserializeObject<Dictionary<string, List<ParameterInfo>>>(json) 

Dies funktioniert gut, aber jetzt Ich möchte den JSON ändern, so dass es ein zusätzliches Feld am Anfang der Datei enthält.

dh:

{ 
    "UrbanLandUse" : ["UrbanSourceMixed", "UrbanSourceSealedRoad", "UrbanSourceUnsealedRoad" ], 
    "UrbanSourceUnsealedRoad": 
    [ 
     { 
     ... 

Aber jetzt meine JSON-Datei ist nicht länger ein Wörterbuch enthält List<ParameterInfo>

Die JSON Spec scheint darauf hinzudeuten, dass es tatsächlich möglich ist

Aber ich bin nicht sicher, wie um es mit der JSON.net API zu deserialisieren

Kann ich das tun?

+0

Ich frage mich, ob ich JSON nicht auf diese Weise verwenden soll und ich sollte es einfach anders lösen ... – sav

Antwort

1

Bereiten Sie ein umgebendes Objekt vor, das ParameterInfo und das neue, das Sie möchten, enthält. Etwas wie folgt aus:

public class Container 
{ 
    public Dictionary<string, List<ParameterInfo>> {get; set;} 
    public string[] UrbanLandUse {get; set;} 
} 

Dann in das Objekt wie folgt deserialisieren:

JsonConvert.DeserializeObject<Container>(json); 

Lassen Sie mich wissen, ob das funktioniert.

Verwandte Themen