我有一个Web服务,它返回以下数据:
<?xml version=""1.0"" encoding=""UTF-8""?>
<RESPONSE>
<KEY>12345</KEY>
<PROPERTY>
<PROPERTY_ADDRESS>
<STREET_NUM>25</STREET_NUM>
<STREET_ADDRESS>ELM ST</STREET_ADDRESS>
<STREET_PREFIX/>
<STREET_NAME>ELM</STREET_NAME>
<STREET_TYPE>ST</STREET_TYPE>
<STREET_SUFFIX/>
</PROPERTY_ADDRESS>
</PROPERTY>
</RESPONSE>
我有一个需要匹配的类结构:
[DataContract(Name="RESPONSE", Namespace="")]
public class Response
{
[DataMember(Name="KEY")]
public string Key { get; set; }
[DataMember(Name = "PROPERTY")]
public Property Property { get; set; }
}
[DataContract(Name="PROPERTY", Namespace="")]
public class Property
{
[DataMember(Name="PROPERTY_ADDRESS")]
public PropertyAddress Address { get; set; }
}
[DataContract(Name="PROPERTY_ADDRESS", Namespace="")]
public class PropertyAddress
{
[DataMember(Name="STREET_NUM")]
public string StreetNumber { get; set; }
[DataMember(Name = "STREET_ADDRESS")]
public string StreetAddress { get; set; }
[DataMember(Name = "STREET_PREFIX")]
public string StreetPrefix { get; set; }
[DataMember(Name = "STREET_NAME")]
public string StreetName { get; set; }
[DataMember(Name = "STREET_TYPE")]
public string StreetType { get; set; }
[DataMember(Name = "STREET_SUFFIX")]
public string StreetSuffix { get; set; }
}
我的反序列化代码如下:
[Test]
public void TestMapping()
{
var serializer = new DataContractSerializer(typeof(Response));
Response response = null;
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(XmlData)))
{
response = (Response)serializer.ReadObject(ms);
}
//This works
Assert.AreEqual("12345", response.Key);
//This works
Assert.AreEqual("25", response.Property.Address.StreetNumber);
//This FAILS. StreetAddress is null
Assert.AreEqual("ELM ST", response.Property.Address.StreetAddress);
}
就我而言,我无法弄清楚为什么StreetAddress失败了。肯定是我忽略了一些简单的东西。