2016-09-30 4 views
0

Ich habe einen JSON von Web-ähnliche I # cJson zu C# Klasse Wurffehler Serialisierung

{ 
    "data": { 
    "normal_customer": { 
     "0": { 
     "id": 1, 
     "name": "ALPHY" 


     } 
     }, 
     "1": { 
     "id": 2, 
     "name": "STEVEN"   

     } 

    }, 
    "luxury_customer": { 
     "3": { 
     "id": 8, 
     "name": "DEV" 

     } 
    } 
    } 
} 

Rückkehr Klassen

public class StandardCustomers 
{ 
    public List<CustomersDetails> Customers_Details { get; set; } 
} 

public class CustomersDetails 
{ 
    [JsonProperty("id")] 
    public int id { get; set; } 

    [JsonProperty("name")] 
    public string name { get; set; } 

    public class LuxuryCustomers 
    { 
     public List<CustomersDetails> Customers_Details { get; set; } 
    } 

    public class Data 
    { 
     public StandardCustomers standard_Customers { get; set; } 
     public LuxuryCustomers luxury_Customers { get; set; } 
    } 

    public class RootObject 
    { 
     public Data data { get; set; } 
    } 
} 

Als ich deserialisieren verwenden, um die Antwort von der Website unter Verwendung von unter C# erstellt haben Code

aber result1.luxury_customers enthält customerdetails, die Null ist.

Wie von @hellostone vorgeschlagen, habe ich zu rootdata geändert, dann auch result1.luxury_customers enthält customerdetails ist null.

Jede Idee, wie man C# Klasse deserialisiert

Wenn wir Json zu Visual Studio eingefügt, es Klassen, wie unten

public class Rootobject 
    { 
     public Data data { get; set; } 
    } 

    public class Data 
    { 
     public Standard_Customers standard_Customers { get; set; } 
     public Luxury_Customers luxury_Customers { get; set; } 
    } 

    public class Standard_Customers 
    { 
     public _0 _0 { get; set; } 
     public _1 _1 { get; set; } 
     public _2 _2 { get; set; } 
     public _4 _4 { get; set; } 
     public _5 _5 { get; set; } 
    } 

    public class _0 
    { 
     public int id { get; set; } 
     public string name { get; set; } 

    } 

einzelnen Klassen erzeugt werden, in Standard-Kunden generiert, können wir die Liste für diesen Einsatz

+0

es scheint, dass deserializion in 'RootObject' sein muss. 'var result1 = JsonConvert.DeserializeObject (Antwort)'; – hellowstone

+0

@Hellowstone Ich habe versucht mit Rootobject, aber CustomersDetails ist Null – user1554650

+3

Nehmen Sie Ihre JSON und fügen Sie es in Visual Studio mit 'Paste Special> Einfügen JSON als Klassen' oder verwenden Sie eine der Online JSON zu C# Converter. –

Antwort

1

Ich denke, das Problem ist, dass der Index in luxury_customers nicht von Null beginnt. Versuchen Sie stattdessen Dictionary<string,CustomersDetails> in LuxuryCustomers List<CustomersDetails> zu verwenden.

Ich habe es geschafft Json mit dieser Klassen deserialisieren:

public class CustomersDetails 
{ 
    [JsonProperty("id")] 
    public int id { get; set; } 
    [JsonProperty("name")] 
    public string name { get; set; } 
} 

public class Data 
{ 
    public Dictionary<string, CustomersDetails> normal_customer { get; set; } 
    public Dictionary<string,CustomersDetails> luxury_customer { get; set; } 
} 

public class RootObject 
{ 
    public Data data { get; set; } 
} 

Deserialisierung Code:

var result = JsonConvert.DeserializeObject<RootObject>(text); 

P. S. Ich habe eine schließende Klammer nach "ALPHY" -Element entfernt, um Json gültig zu machen, ich hoffe, es war ein Tippfehler und du erhältst gültige Json.

0

Ihre JSON-Zeichenfolge stimmt nicht mit Ihren definierten Klassen überein. Ihre JSON-String sollte so aussehen, wenn Sie Ihre Klassenstruktur erhalten wollen:

{ 
"data":{ 
    "standard_Customers":{ 
    "Customers_Details":[ 
     { 
      "id":1, 
      "name":"ALPHY" 
     }, 
     { 
      "id":2, 
      "name":"STEVEN" 
     } 
    ] 
    }, 
    "luxury_Customers":{ 
    "Customers_Details":[ 
     { 
      "id":8, 
      "name":"DEV" 
     } 
    ] 
    } 
} 
} 

Achten Sie auf die eckigen Klammern im „Customers_Details“ -Attribut.

Dann ist die:

var result1 = JsonConvert.DeserializeObject<RootObject>(response); 

Anruf, geben Sie das richtige Objekt zurück und es sollte nicht null sein, wenn Ihre Klassenstruktur mit:

public class StandardCustomers 
{ 
    public List<CustomersDetails> Customers_Details { get; set; } 
} 

public class CustomersDetails 
{ 
    [JsonProperty("id")] 
    public int id { get; set; } 
    [JsonProperty("name")] 
    public string name { get; set; } 
} 

public class LuxuryCustomers 
{ 
    public List<CustomersDetails> Customers_Details { get; set; } 
} 

public class Data 
{ 
    public StandardCustomers standard_Customers { get; set; } 
    public LuxuryCustomers luxury_Customers { get; set; } 
} 

public class RootObject 
{ 
    public Data data { get; set; } 
} 
0

Ich denke, das ist, was Sie Bedarf:

Json

{ 
"data": { 
    "normal_customer": { 
     "0": { 
      "id": 1, 
      "name": "A" 
     }, 
     "1": { 
      "id": 2, 
      "name": "B" 
     } 
    }, 
    "luxury_customer": { 
     "3": { 
      "id": 1, 
      "name": "A" 
     } 
    } 
} 
} 

Klassenstruktur

public class Rootobject 
{ 
    public Data data { get; set; } 
} 

public class Data 
{ 
    public Dictionary<string, Normal_Customer> normal_customer { get; set; } 

    public Dictionary<string, Luxury_Customer> luxury_customer { get; set; } 
} 

public class Normal_Customer 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 

public class Luxury_Customer 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 
+0

Json angegeben ist falsch, gibt es eine Kundendetails – user1554650

+0

Welche Kundendaten, es hat die Daten, die Sie zur Verfügung gestellt haben –

+0

Jsonstructure ist falsch, gibt es "0" fehlt – user1554650