2016-04-21 78 views
1

Ich habe eine JSON-Datei (Text) mit 908 Zeilen Daten mit mehreren Hardwareklassen.Deserialisieren von JSON-Dateien

Jede Gruppierung enthält diese, wobei Eigenschaften sich je nach Komponententyp ändern.

"HardwareID": "ACPI\\AuthenticAMD_-_AMD64_Family_16_Model_4", 
"Count": "8", 
"Class": "Processor", 
"Properties": { } 
"DeviceType": "Cpu", 
"Description": "Quad-Core AMD Opteron(tm) Processor 2373 EE" 

Ich glaube, der erste Teil zu einer öffentlichen Klasse ist (das heißt Devices), dass Störungen, wie die JSON-Datei strukturiert. Ist das richtig? Wenn ja, wie füge ich die Eigenschaften hinzu?

Dann einmal geladen, kann ich das Objekt in der folgenden Weise deserialisieren.

Devices device = JsonConvert.DeserializeObject<Devices>(json); 

Bin ich auf dem richtigen Weg? Es war mein Plan, wie ich die verschiedenen Klassen laden Prozessor, Festplatte usw.], um sie in eine bestimmte DataTable zu laden. Sobald die Datei vollständig ausgewertet wurde, werden die verschiedenen DataTables an eine CSV-Datei ausgegeben. Dies gibt mir die Möglichkeit, die verschiedenen Komponenten zu bewerten.

namespace jsonReader 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.Runtime.Serialization; 
    using Newtonsoft.Json; 

    [DataContract] 
    public class RootObject 
    { 
     public class Devices 
     { 
       public string HardwareId { get; set; } 
       public int Count { get; set; } 
       public string Class { get; set; } 
       public IList<string> Properties { get; set; } 
       public string DeviceType { get; set; } 
       public string Description { get; set; } 
     } 
    } 

Hier ist, wie meine JSON-Datei aussieht.

{ 
    "Devices": [ 
     { 
      "HardwareID": "ACPI\\AuthenticAMD_-_AMD64_Family_16_Model_4", 
      "Count": "8", 
      "Class": "Processor", 
      "Properties": { 
        "CPUIDBrandString": "Quad-Core AMD Opteron(tm) Processor 2373 EE", 
        "CPUIDString": "AuthenticAMD", 
        "CPUIDMultithreading": "1", 
        "CPUIDBrandID": "0", 
        "CPUIDExtFamily": "1", 
        "CPUIDExtModel": "0", 
        "CPUIDSteppingID": "2", 
        "CPUIDNumberOfCores": "0", 
        "CPUIDLogicalCPUCount": "4", 
        "CPUIDFamily": "15", 
        "CPUIDVMExt": "0", 
        "CPUCount": "8", 
        "CPUIDProcessorID": "1696726757271408450", 
        "IsNuma": "true", 
        "CPUIDType": "0", 
        "Cpu_Temperature": "0.000000", 
        "CPUIDCapable64bit": "1", 
        "CPUIDModel": "4" 
       }, 
       "DeviceType": "Cpu", 
       "Description": "Quad-Core AMD Opteron(tm) Processor 2373 EE" 
      }, 
     ], 
} 
+0

verwenden Sie besser http://json2csharp.com/, um die richtige C# -Klasse für bestimmte JSON, oder Sie können bearbeiten-> einfügen spezielle -> Einfügen von JSON als Klassen in Ihrem Visual Studio. –

Antwort

2

Ich glaube, der erste Teil zu einer öffentlichen Klasse ist (das heißt Devices), dass Störungen, wie die JSON-Datei strukturiert. Ist das richtig?

Ja ist es. Im Grunde kiste Sie eine class, die Ihre Josn darstellt.

Wenn ja, wie füge ich die Eigenschaften hinzu?

Die Properties in Ihrem Fall ist selbst ein class, so dass Sie ein class es darstellt schaffen sollte.

So Ihre Klassen werden wie folgt aussehen:

public class RootObject 
{ 
    public Device[] Devices { get; set; } 
} 

public class Device 
{ 
    public string HardwareID { get; set; } 
    public string Count { get; set; } 
    public string Class { get; set; } 
    public Properties Properties { get; set; } 
    public string DeviceType { get; set; } 
    public string Description { get; set; } 
} 

public class Properties 
{ 
    public string CPUIDBrandString { get; set; } 
    public string CPUIDString { get; set; } 
    public string CPUIDMultithreading { get; set; } 
    public string CPUIDBrandID { get; set; } 
    public string CPUIDExtFamily { get; set; } 
    public string CPUIDExtModel { get; set; } 
    public string CPUIDSteppingID { get; set; } 
    public string CPUIDNumberOfCores { get; set; } 
    public string CPUIDLogicalCPUCount { get; set; } 
    public string CPUIDFamily { get; set; } 
    public string CPUIDVMExt { get; set; } 
    public string CPUCount { get; set; } 
    public string CPUIDProcessorID { get; set; } 
    public string IsNuma { get; set; } 
    public string CPUIDType { get; set; } 
    public string Cpu_Temperature { get; set; } 
    public string CPUIDCapable64bit { get; set; } 
    public string CPUIDModel { get; set; } 
} 

Beachten Sie, dass Sie auch nicht DataContract Attribut müssen verwenden und für Ihre Json deserialisieren (mit Json.NET) Sie schreiben müssen:

Devices device = JsonConvert.DeserializeObject<RootObject>(json); 

Als Tipp können Sie diese Datenklassen problemlos erstellen, indem Sie Visual Studio (2012 aufwärts) Bearbeiten> Inhalte einfügen> JSON als Klassen einfügen Menüpunkt einfügen. Kopieren Sie einfach Ihre JSON-String-Daten in die Zwischenablage (Strg + C) und verwenden Sie dann die Option "Einfügen".

+0

Danke für all die Arin ... Ihre Vorschläge waren richtig. – EMIE

Verwandte Themen