2017-10-10 2 views
0

Je suis assez nouveau à l'awesomeness qui est JSON - J'utilise le DataContractJsonSerializer. Je ne peux pas obtenir les multiples instances des objets Client dans la liste.Désérialise JSON multi-part avec DataContractJsonSerializer

Les attributs fonctionnent comme prévu mais il n'y a aucun objet client dans ma liste.

{ 
    "@attributes": 
     {"count":"2", 
     "offset":"0", 
     "limit":"100" 
     }, 
    "Customer": 
     { 
      "firstName":"cust ", 
      "lastName":"one", 
      "title":"Owner", 
      "company":"CustOne Plants", 
      "companyRegistrationNumber":"", 
      "vatNumber":"", 
      "creditAccountID":"1", 
      "customerTypeID":"4", 
      "discountID":"0", 
      "taxCategoryID":"0", 
      "customerID":"1", 
      "createTime":"2017-06-19T23:36:11+00:00", 
      "timeStamp":"2017-06-20T18:55:11+00:00", 
      "archived":"false" 
     } 
    "Customer": 
     { 
      "firstName":"cust ", 
      "lastName":"two", 
      "title":"Owner", 
      "company":"CustTwo House of Games", 
      "companyRegistrationNumber":"", 
      "vatNumber":"", 
      "creditAccountID":"1", 
      "customerTypeID":"4", 
      "discountID":"0", 
      "taxCategoryID":"0", 
      "customerID":"1", 
      "createTime":"2017-06-19T23:36:11+00:00", 
      "timeStamp":"2017-06-20T18:55:11+00:00", 
      "archived":"false" 
     } 
} 

code .NET:

StreamReader stream = new StreamReader(@"C:\TMC Projects\PotteryManufacturing\CustomerJSON.txt"); 
string text = stream.ReadToEnd(); 
stream.Close(); 
byte[] byteArray = Encoding.UTF8.GetBytes(text); 
MemoryStream stream1 = new MemoryStream(byteArray); 

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(CustomersRoot)); 
var varInfo = serializer.ReadObject(stream1) as CustomersRoot; 
stream1.Close(); 

et enfin mes classes/contrats de données/données membres:

[DataContract] 
public class CustomersRoot 
{ 
    private List<Customer> m_Customers; 

    public CustomersRoot() { this.Customer = new List<Customer>(); } 
    [DataMember(Name ="@attributes")] 
    public Attributes attrs { get; set; } 

    [DataMember(Name = "Customer")] 
    public List<Customer> Customer 
    { 
     get { return m_Customers; } 
     set { m_Customers = value; } 
    } 
} 
[DataContract] 
public class Customer 
{ 
    [DataMember(Name ="firstName")] 
    public string firstName { get; set; } 
    [DataMember(Name = "lastName")] 
    public string lastName { get; set; } 
    [DataMember(Name = "title")] 
    public string title { get; set; } 
    [DataMember(Name = "company")] 
    public string company { get; set; } 
    [DataMember(Name = "companyRegistrationNumber")] 
    public string companyRegistrationNumber { get; set; } 
    [DataMember(Name = "vatNumber")] 
    public string vatNumber { get; set; } 
    [DataMember(Name = "creditAccountID")] 
    public int creditAccountID { get; set; } 
    [DataMember(Name = "customerTypeID")] 
    public int customerTypeID { get; set; } 
    [DataMember(Name = "discountID")] 
    public int discountID { get; set; } 
    [DataMember(Name = "taxCategoryID")] 
    public int taxCategoryID { get; set; } 
    [DataMember(Name = "customerID")] 
    public int customerID { get; set; } 
    [DataMember(Name = "createTime")] 
    public string createTime { get; set; } 
    [DataMember(Name = "timeStamp")] 
    public string timeStamp { get; set; } 
    [DataMember(Name = "archived")] 
    public bool archived { get; set; } 
} 

[DataContract] 
public class Attributes 
{ 
    [DataMember(Name = "count")] 
    public int count { get; set; } 
    [DataMember(Name = "offset")] 
    public int offset { get; set; } 
    [DataMember(Name = "limit")] 
    public int limit { get; set; } 
} 
+0

Je suis en train de mettre à jour avec un nouveau code pour que vous puissiez tous voir où je suis - ne fonctionne toujours pas mais je sais qu'il doit y avoir un moyen. –

+0

Si vous lisez la documentation pour [JavaScriptSerializer Class] (https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer (v = vs.110) .aspx), il est spécifiquement "Json.NET devrait être utilisé pour la sérialisation et la désérialisation". – crashmstr

+0

LOL - vraiment? C'est terrible! Eh bien, heureusement, ces mêmes services Web ont un point de terminaison XML et la désérialisation de XML est EASY AS PIE! :) –

Répondre

0

Je compris ce qui se passe ici - l'appel peut parfois retourner un tableau d'objets Client (non formaté correctement ci-dessus) OU une seule instance de l'objet. Lorsque le service Web renvoie une seule instance client, le code de liste ne fonctionne pas. Je vais devoir vérifier comment faire face à ce problème.