3

这是对此问题的后续问题。我问如何解析,我得到了答案。话虽如此,我仍然没有让它工作,但这可能不是因为答案不足。

我想调试不当行为,但坦率地说我不知道​​如何。

这是我的反序列化代码。

DataContractJsonSerializer serializer 
  = new DataContractJsonSerializer(typeof(Customer));
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(textToParse));
Envelope customer = (Customer)serializer.ReadObject(stream);

return "Status = " + customer.Status + " and guid = " + customer.Guid

这是我使用的数据合约。

[DataContract]
public class Customer
{
  [DataMember(Name = "Status")]
  public int Status;

  [DataMember(Name = "CustomerId")]
  public String Guid;

  [DataMember(Name = "Information")]
  public Object Info;
}

这是要解析的文本的头部。

{"CustomerStatuses":[{
  "Information":[{"Guid":"1","Role":"Customer"}],
  "CustomerId":"12345678-1234-1324-1234-123456781234",
  "Status":"4"},
  "Information":[{"Guid":"5","Role":"Customer"}],
  "CustomerId":"12345678-1234-1324-1234-123456781234",
  "Status":"6"},
  "Information":[{"Guid":"7","Role":"Seller"}],
  "CustomerId":"12345678-1234-1324-1234-123456781234",
  "Status":"6"},
  ...

问题是属性Status显示为 0 而Guid显示为 null 或空字符串。我只是不打他们。这里有什么问题,我该如何调试?

4

1 回答 1

0

可以这么说,您定位到了错误的部分,或者使用了错误的标签。您不应该尝试解析CustomerCustomerStatuses,因为那是您的根对象。你需要一堂课。希望您的客户会接受这一点。

这是数据合约的代码。我已经包含了字段Info,因为它看起来像您需要它,但按照规范,您也可以省略它。

[DataContract]  
public class CustomerStatuses
{
  [DataMember(Name = "CustomerStatuses")]
  public IEnumerate<Customer> Customers;
}

[DataContract]
public class Customer
{
  [DataMember(Name = "Status")]
  public int Status;

  [DataMember(Name = "CustomerId")]
  public String Guid;

  [DataMember(Name = "Information")]
  public Object Info;
}

然后,您可以通过此代码访问这些内容。

DataContractJsonSerializer serializer 
  = new DataContractJsonSerializer(typeof(CustomerStatuses));
MemoryStream stream = new MemoryStream(Encoding.ASCII.GetBytes(jsonText));
CustomerStatuses parser = (CustomerStatuses)serializer.ReadObject(stream);

String guid = parser.DocumentStatuses.FirstOrDefault().Guid;
int status = parser.DocumentStatuses.FirstOrDefault().Status;

这肯定会在明天出现在我的博客上!

于 2013-02-08T23:25:52.727 回答