使用DataContractJsonSerializer反序列化多部分JSON

时间:2017-10-10 00:29:20

标签: json serialization

我对JSON非常棒的新手 - 我正在使用DataContractJsonSerializer。我无法将Customer对象的多个实例放入列表中。

属性按预期工作,但我的列表中没有Customer对象。??

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

1 个答案:

答案 0 :(得分:0)

我弄清楚这里发生了什么 - 调用有时会返回一个Customer对象数组(上面没有正确格式化)或对象的单个实例。当Web服务返回单个Customer实例时,List代码不起作用。我将不得不检查如何处理这个问题。