2016-11-09 5 views
0

Nicht sicher, ob der Titel dem entspricht, was ich eigentlich will, Vorschläge willkommen.Erstellen Sie JSON mit Wert als Objekt

ich eine JSON-Datei wie folgt:

{ 
    "Sonos": [ 
    { 
     "Ips": [ 
      { 
       "Volume": "5", 
       "ip": "192.168.10.214" 
      }, 
      { 
       "Volume": "5", 
       "ip": "192.168.10.204" 
      } 
      ] 
     } 
    ] 
} 

Klasse

public class GetConfig 
{ 
    public List<Cfg> Sonos { get; set; } 
} 

public class Cfg 
{ 
    public List<Ip> Ips { get; set; } 
} 

public class Ip 
{ 
    public string Volume { get; set; } 
    public string ip { get; set; } 
} 

JSON erstellen

var list = new List<Cfg>(); 
     var ips = new List<Ip>(); 

     foreach (ListViewItem item in sonosListExt1.Items) 
     { 

      ips.Add(new Ip {Volume = "5", ip = item.Text }); 
     } 

     list.Add(new Cfg { Ips = ips }); 

     var gC = new GetConfig 
     { 
      Sonos = list 
     }; 
    ... 
    //WRITE TO FILE 

Was ich will eigentlich (obwohl, wenn gültig nicht sicher)

{ 
"Sonos": [ 
{ 
    "192.168.10.214": [ 
    { 
     "Volume": "5" 
    }, 
    "192.168.10.204": [ 
    { 
     "Volume": "5" 
    } 
    ] 
} 
]} 

Ich weiß nicht, wie ich die tatsächliche IP als ein Objekt erstellen kann, dass das Volumen des genannten IP enthält. Oder brauche ich vielleicht einen anderen Ansatz?

Was will ich mit IPs, Schleife durch diese Liste und will

Ich habe eine Liste tun, um die Lautstärke der config.json-Datei zu erhalten, gibt es vielleicht einen besseren Weg?

+0

Wie wäre es mit einer 'List >' inset von 'List ' in 'Cfg 'Klasse? – Developer

+0

Was ist das Endziel? Sie möchten das angegebene Volumen pro IP überprüfen und Code dafür schreiben oder das Format von jSON korrigieren? – A3006

+0

Ihr gewünschter JSON ist ungültig. Laden Sie http://jsonlint.com/ hoch und Sie sehen den Fehler 'Fehler: Parse Fehler in Zeile 6:'. Wenn Sie die IP-Adresse dem JSON-Eigenschaftsnamen zuordnen möchten, sollten Sie im Allgemeinen ein Wörterbuch mit der IP-Adresse als Schlüssel verwenden. Siehe z.B. [Deserialisieren verschachtelter JSON in C# -Objekte] (https://StackOverflow.com/questions/38793151/deserialize-nested-json-into-c-sharp-objects). – dbc

Antwort

1

Sie JSON ungültig ist, gehe ich davon aus Ihre JSON ist:

{ 
    "Sonos": [ 
    { 
     "192.168.10.214": [ 
     { 
      "Volume": "5" 
     } 
     ], 
     "192.168.10.204": [ 
     { 
      "Volume": "5" 
     } 
     ] 
    } 
    ] 
} 

Wenn ja, können Sie es über diese Klassenstruktur deserialisieren könnte:

class Container 
{ 
    public List<Dictionary<string, List<Cfg>>> Sonos { get; set;} 
} 

class Cfg 
{ 
    public string Volume { get; set; } 
} 

// ... 
var container = JsonConvert.DeserializeObject<Container>(json); 

Erstellen eines Modells für die JSON erreicht werden könnte via:

var container = new Container(); 
container.Sonos = new List<Dictionary<string, List<Cfg>>> 
{ 
    new Dictionary<string, List<Cfg>> 
    { 
     { "192.168.10.214", new List<Cfg> { new Cfg { Volume = "5" } } } 
    } 
}; 

var json = JsonConvert.SerializeObject(container); 
+0

Ich denke, die Frage ist nicht klar genug, aber ich möchte den JSON (wie in Ihrem Code), mit diesem Code, wie würde ich hinzufügen/erstellen Werte zum JSON – PrimuS

+0

@PrimuS überprüfen Sie das Update, ich habe hinzugefügt ein Beispielmodell – Nico

+1

Perfekt, vollständig verstanden Ihren Code und passte es an! Vielen Dank! – PrimuS

0

, wenn Ihr mit VS 2015 arbeiten und Sie bereits eine bestehende Json haben oder Xml, structu Wenn Sie nur den passenden Typ für die Deserialisierung haben möchten, gibt es eine Funktion namens "Einfügen Spezial" im Bearbeitungsmenü. Sie müssen nur die JSON oder XML in der Zwischenablage und VS2015 wird die Klassen für Sie generieren.