2017-07-03 1 views
0

Comment désérialiser cette chaîne JSON en C#PHP JSON à C# objet comment désérialiser JSON

{ "comptable": { "sysid": "1", "prenom": "Test" , "last_name": "test", "product_type": "échantillon" }}

Ce que j'ai essayé jusqu'à présent utilise JsonConvert.DeserializeObject

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

ceci est mon modèle

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; } 
} 

mais cela résulte d'une erreur

Une exception de type 'Newtonsoft.Json.JsonSerializationException' a eu lieu en Newtonsoft.Json.dll mais n'a pas été traité dans le code utilisateur

Informations supplémentaires: Impossible de désérialiser l'objet JSON en cours (par exemple {"name": "value"}) dans le type "System.Collections.Generic.List`1 [MyApp.UserData]" car le type requiert un tableau JSON (par exemple [1,2,3]) pour désérialiser correctement. Pour corriger cette erreur, changez le JSON en un tableau JSON (par exemple [1,2,3]) ou changez le type désérialisé pour qu'il soit un type .NET normal (par exemple, pas un type primitif comme un entier, pas un type de collection comme un tableau ou une liste) qui peut être désérialisé à partir d'un objet JSON. JsonObjectAttribute peut également être ajouté au type pour le forcer à désérialiser à partir d'un objet JSON.

Répondre

0

Votre chaîne d'entrée JSON n'est pas correcte. AccountantData utilise List (matrice) de UserData. Essayez ceci:

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

Mise à jour: Si vous allez toujours avoir un seul objet de UserData alors vous pouvez changer votre classe AccountantData comme:

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

En outre, dans le cas où vous serez toujours avoir un seul objet et vous avez le contrôle des données JSON, alors vous pouvez mettre à jour vos données d'entrée JSON à un format plus simple comme ci-dessous:

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

puis deserialize comme ceci:

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

j'utilise json_encode après avoir reçu le rowData. Ai-je besoin de le formater pour devenir tableau quand je json_encode? –

+0

Ne pensez pas que cela a quelque chose à voir avec json_encode si j'ai bien compris votre question. Si vos données JSON vont toujours avoir un seul objet UserData, vous pouvez mettre à jour votre classe AccountantData. J'ai mis à jour ma réponse avec explication. –