2016-11-01 2 views
3

Je reçois des données Json d'un serveur Web, mais lorsque j'essaie de les désérialiser vers des objets, je ne reçois aucune donnée. La chaîne JSON ressemble à ceci:Je ne reçois pas de données d'objet de la désérialisation de Json

{"success":true,"data":[{"Id":6,"CustomerGuid":"70b390d8-82d5-4bba-aa68-fc8268a1b1ff","UserName":"[email protected]","Email":"[email protected]","CustomerRoles":[{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":false,"Active":false,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":null,"CreatedOnUtc":"\/Date(1472933472393)\/","LastLoginDateUtc":null,"LastActivityDateUtc":"\/Date(1472933472393)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[]},{"Id":5,"CustomerGuid":"eb9e6f24-f362-4c10-942a-366e2919dc11","UserName":"[email protected]","Email":"[email protected]","CustomerRoles":[{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":false,"Active":false,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":null,"CreatedOnUtc":"\/Date(1472933472363)\/","LastLoginDateUtc":null,"LastActivityDateUtc":"\/Date(1472933472363)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[]},{"Id":4,"CustomerGuid":"9f46dbae-6942-410c-90b8-9b38a0890064","UserName":"[email protected]","Email":"[email protected]","CustomerRoles":[{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":false,"Active":false,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":null,"CreatedOnUtc":"\/Date(1472933472317)\/","LastLoginDateUtc":null,"LastActivityDateUtc":"\/Date(1472933472317)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[]},{"Id":3,"CustomerGuid":"6277386b-13ee-427b-9cfe-4ebfa487c340","UserName":"[email protected]","Email":"[email protected]","CustomerRoles":[{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":false,"Active":false,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":null,"CreatedOnUtc":"\/Date(1472933472253)\/","LastLoginDateUtc":null,"LastActivityDateUtc":"\/Date(1472933472253)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[]},{"Id":2,"CustomerGuid":"241f45f1-b38c-4e22-8c5a-743fa3276620","UserName":"[email protected]","Email":"[email protected]","CustomerRoles":[{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":false,"Active":false,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":null,"CreatedOnUtc":"\/Date(1472933472207)\/","LastLoginDateUtc":null,"LastActivityDateUtc":"\/Date(1472933472207)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[]},{"Id":1,"CustomerGuid":"a940dc03-5f52-47d2-9391-8597b3b31cf2","UserName":"[email protected]","Email":"[email protected]","CustomerRoles":[{"Id":1,"Name":"Administrators","SystemName":"Administrators"},{"Id":2,"Name":"Forum Moderators","SystemName":"ForumModerators"},{"Id":3,"Name":"Registered","SystemName":"Registered"}],"AdminComment":null,"IsTaxExempt":false,"AffiliateId":0,"VendorId":0,"HasShoppingCartItems":true,"Active":true,"Deleted":false,"IsSystemAccount":false,"SystemName":null,"LastIpAddress":"71.185.255.7","CreatedOnUtc":"\/Date(1472933470783)\/","LastLoginDateUtc":"\/Date(1477522483903)\/","LastActivityDateUtc":"\/Date(1477523996553)\/","ExternalAuthenticationRecords":[],"ShoppingCartItems":[{"Id":1,"StoreId":1,"ShoppingCartTypeId":1,"CustomerId":1,"ProductId":18,"AttributesXml":null,"CustomerEnteredPrice":0.0000,"Quantity":1,"CreatedOnUtc":"\/Date(1473801903447)\/","UpdatedOnUtc":"\/Date(1473803336207)\/","IsFreeShipping":false,"IsShipEnabled":true,"AdditionalShippingCharge":0.0000,"IsTaxExempt":false}]}]}

J'ai créé ces classes de la recommandation figurant dans ce lien: recommendation

je cette option pour créer les classes: json2csharp

Response classe:

class Response 
{ 
    bool success; 
    IList<Customer> data; 
} 

classe client:

class Customer 
{ 
    public int Id { get; set; } 
    public string CustomerGuid { get; set; } 
    public string UserName { get; set; } 
    public string Email { get; set; } 
    public List<CustomerRole> CustomerRoles { get; set; } 
    public object AdminComment { get; set; } 
    public bool IsTaxExempt { get; set; } 
    public int AffiliateId { get; set; } 
    public int VendorId { get; set; } 
    public bool HasShoppingCartItems { get; set; } 
    public bool Active { get; set; } 
    public bool Deleted { get; set; } 
    public bool IsSystemAccount { get; set; } 
    public object SystemName { get; set; } 
    public string LastIpAddress { get; set; } 
    public DateTime CreatedOnUtc { get; set; } 
    public DateTime? LastLoginDateUtc { get; set; } 
    public DateTime LastActivityDateUtc { get; set; } 
    public List<object> ExternalAuthenticationRecords { get; set; } 
    public List<object> ShoppingCartItems { get; set; } 

} 

classe CustomerRole:

class CustomerRole 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string SystemName { get; set; } 

} 

classe ExternalAuthenticationRecord:

class ExternalAuthenticationRecord 
{ 
    public int Id { get; set; } 
    public int CustomerId { get; set; } 
    public string Email { get; set; } 
    public object ExternalIdentifier { get; set; } 
    public object ExternalDisplayIdentifier { get; set; } 
    public object OAuthToken { get; set; } 
    public object OAuthAccessToken { get; set; } 
    public string ProviderSystemName { get; set; } 
} 

classe ShoppingCartItem:

class ShoppingCartItem 
{ 
    public int Id { get; set; } 
    public int StoreId { get; set; } 
    public int ShoppingCartTypeId { get; set; } 
    public int CustomerId { get; set; } 
    public int ProductId { get; set; } 
    public object AttributesXml { get; set; } 
    public double CustomerEnteredPrice { get; set; } 
    public int Quantity { get; set; } 
    public DateTime CreatedOnUtc { get; set; } 
    public DateTime UpdatedOnUtc { get; set; } 
    public bool IsFreeShipping { get; set; } 
    public bool IsShipEnabled { get; set; } 
    public double AdditionalShippingCharge { get; set; } 
    public bool IsTaxExempt { get; set; } 

} 

J'utilise cette déclaration pour deserialzie la chaîne JSON: Response res = (Response)JsonConvert.DeserializeObject(customerJson, (typeof(Response)));

Quand je l'arrête dans le débogueur, il montre « res » en tant que données: nulle et succès: false.

Je ne reçois aucune erreur. C'est juste ne pas me donner les données de la chaîne JSON.

Toute aide que quelqu'un peut fournir pour comprendre pourquoi je ne reçois pas les données que je veux dans "res", serait grandement appréciée.

Merci, Tony

+1

Veuillez prendre le temps de réviser votre question dans un effort [mcve] - mettre en format le JSON et tout le code, le rendre minimal, et complète afin que nous puissions reproduire le problème. –

+2

On dirait qu'il devrait être 'Réponse res = JsonConvert.DeserializeObject (customerJson);' – Equalsk

+0

@ Equalsk - J'ai essayé votre méthode et j'obtiens les mêmes résultats. J'ai utilisé ceci comme guide pour créer ma déclaration: [http://www.newtonsoft.com/json/help/html/DeserializeObject.htm]. Merci. – Tony

Répondre

4

Le problème est lié au niveau d'accessibilité dans votre classe Response. Par défaut, les champs, la propriété et la méthode sont privés, donc JsonConvert n'est pas capable de remplir les propriétés.
Modifier la classe comme suit:

class Response 
{ 
    public bool success {get; set;} 
    public IList<Customer> data {get; set;} 
} 

Et wil œuvres.
Une autre amélioration est liée à l'utilisation de JsonConvert. Pour éviter la conversion explicite, utilisez ce type de conversion: JsonConvert.DeserializeObject<T>(string) où T sera Response

+0

J'ai essayé ce que vous recommandez et j'obtiens les mêmes résultats. data: null et succès: false. Merci de votre aide. – Tony

+0

OOPS! Désolé, j'ai oublié de rendre les propriétés "publiques".Cela fonctionne comme vous l'avez recommandé. Je reçois maintenant des données de la chaîne JSON. Merci de votre aide. – Tony