JSON-Daten liegen in einem eigenen Format vor. Um dieses Datenformat in C# abzubilden benötigt man zuerst eine oder mehrere Klassen. Der Einfachheit halber kann man sich auf der Seite http://json2csharp.com/ aus dem JSON-Datenformat automatisiert C#-Klassen bauen lassen.
Als Beispiel dient folgende JSON-Datei:
{ "SerialNumber": "05857628", "DateTime": "1415783932", "Meters": [{ "InputNumber": "1", "Name": "HZ Wirkleistung BZ 90612021", "Type": "Electricity", "Value": 2092224.000, "Unit": "Wirkleistung" }, { "InputNumber": "2", "Name": "HZ Blindleistung BZ 90612021", "Type": "Electricity", "Value": 2093763.500, "Unit": "Blindleistung" }, ] }
Die zugehörigen C#-Klassen sehen wie folgt aus:
using System.Collections.Generic; using System.Runtime.Serialization; namespace JSONTest { [DataContract] public class Meter { [DataMember] public string InputNumber { get; set; } [DataMember] public string Name { get; set; } [DataMember] public string Type { get; set; } [DataMember] public double? Value { get; set; } [DataMember] public string Unit { get; set; } } [DataContract] public class Meter_List { [DataMember] public string SerialNumber { get; set; } [DataMember] public string DateTime { get; set; } [DataMember] public List<Meter-> Meters { get; set; } } }
Im Code greift man nun folgendermaßen auf die Daten zu:
// im Projektbaum Verweis hinzufügen: System.Runtime.Serialization using System.Net; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; private void btnGetJSON_Click(object sender, EventArgs e) { // JSON-File von URL holen string contents = new System.Net.WebClient().DownloadString("www.datenquelle.de"); // JSON deserialisieren DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Meter_List)); MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(contents)); Meter_List obj = (Meter_List)ser.ReadObject(stream); // Daten ausgeben Console.WriteLine(obj.SerialNumber); Console.WriteLine(obj.Meters.Count); Console.WriteLine(obj.Meters[0].Name); }