2017-07-03 4 views
0

Wie in C#PHP json zu C# Objekt, wie JSON deserialisieren

{ "Buchhalter" Diese JSON-String deserialisieren: { "sysid": "1", "first_name": "Test" , "last_name": "Test", "product_type": "Sample" } }

Was habe ich versucht, so weit wird mit JsonConvert.DeserializeObject

var jsonObj = JsonConvert.DeserializeObject<AccountantData>(responseMessage);

das mein Modell ist

public class AccountantData 
{ 
    [JsonProperty("accountant")] 
    public List<UserData> Accountant { get; set; } 
} 
public class UserData 
{ 
    public UserData(int sysId, string firstName, string lastName, string productType) 
    { 
     SystemId = sysId; 
     FirstName = firstName; 
     LastName = lastName; 
     ProductType = productType; 
    } 

    [JsonProperty("sysid")] 
    public int SystemId { get; set; } 

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

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

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

aber dies führt zu einem Fehler

Eine Ausnahme vom Typ 'Newtonsoft.Json.JsonSerializationException' aufgetreten in Newtonsoft.Json.dll aber wurde nicht im Benutzercode behandelt

Weitere Informationen: Das aktuelle JSON-Objekt kann nicht deserialisiert werden (z. B. {"name": "value"}) in Typ 'System.Collections.Generic.List`1 [MyApp.UserData]', da der Typ ein JSON-Array (z. B. [1,2,3]) erfordert, um korrekt zu deserialisieren.

Um diesen Fehler zu beheben, ändern Sie entweder den JSON in ein JSON-Array (zB [1,2,3]) oder ändern Sie den deserialisierten Typ, so dass es ein normaler .NET-Typ ist (zB kein primitiver Typ wie Integer, nicht ein Sammlertyp wie ein Array oder eine Liste), der aus einem JSON-Objekt deserialisiert werden kann. JsonObjectAttribute kann auch zum Typ hinzugefügt werden, um die Deserialisierung von einem JSON-Objekt zu erzwingen.

Antwort

0

Ihre JSON-Eingabezeichenfolge ist nicht korrekt. AccountantData verwendet List (Array) von UserData. Versuchen Sie folgendes:

{ 
    "accountant":[ 
     { 
     "sysid":"1", 
     "first_name":"Test", 
     "last_name":"Test", 
     "product_type":"Sample" 
     } 
    ] 
} 

Update: Wenn Sie immer gehen, ein einzelnes Objekt von UserData haben, dann können Sie Ihre AccountantData Klasse ändern:

public class AccountantData 
{ 
    [JsonProperty("accountant")] 
    UserData Accountant { get; set; } 
} 

Auch im Falle werden Sie immer haben einzelne UserData Objekt und Sie haben die Kontrolle über JSON-Daten, dann können Sie Ihre JSON-Eingabedaten zu einfacheren Format wie folgt aktualisieren:

{ 
    "sysid":"1", 
    "first_name":"Test", 
    "last_name":"Test", 
    "product_type":"Sample" 
} 

und deserialisieren es wie folgt dann:

var jsonObj = JsonConvert.DeserializeObject<UserData>(responseMessage); 
+0

i verwenden json_encode nach dem rowData bekommen. Muss ich es formatieren, um Array zu werden, wenn ich json_encode? –

+0

Ich glaube nicht, dass es etwas mit json_encode zu tun hat, wenn ich deine Frage richtig verstanden habe. Wenn Ihre JSON-Daten immer ein einzelnes UserData-Objekt haben, können Sie Ihre AccountantData-Klasse aktualisieren. Ich habe meine Antwort mit einer Erklärung aktualisiert. –