2017-10-10 7 views
0

JSONというawesomenessの新機能は、DataContractJsonSerializerを使用しています。 Customerオブジェクトの複数のインスタンスをリストに入れることができません。DataContractJsonSerializerを使用して複数部分のJSONを非直列化する

属性は期待通りに機能しますが、私のリストに顧客オブジェクトはありません。

{ 
    "@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" 
     } 
} 

.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(); 

、最終的には私のクラス/データコントラクト/データメンバー:

[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

私は新しいコードで更新していますので、私はどこにいるのか分かります。まだ動作していませんが、方法が必要です。 –

+0

[JavaScriptSerializer Class](https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer(v = vs.110).aspx)のドキュメントを読むと、具体的に"Json.NETはシリアライゼーションとデシリアライゼーションを使用する必要があります。" – crashmstr

+0

LOL - 本当ですか?それはひどい!まあ、幸いなことに、これらの同じWebサービスにはXMLエンドポイントがあり、XMLのデシリアライズは簡単です! :) –

答えて

0

私はここで何が起こっているかを考え出した - コールは時々返すことができます顧客オブジェクトの配列(上記の形式ではない)またはオブジェクトの単一のインスタンスWebサービスが単一のCustomerインスタンスを返すとき、Listコードは機能しません。私はこの問題をどのように扱うかをチェックしなければならないでしょう。

関連する問題