gpt4 book ai didi

c# - 使用 DataContractSerializer 反序列化 XML

转载 作者:可可西里 更新时间:2023-11-01 03:14:20 26 4
gpt4 key购买 nike

我有一个返回以下数据的网络服务:

<?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 失败的原因。它必须是我所缺少的简单东西。

最佳答案

DataContractSerializer 期望的是 in alphabetical order .您需要将 Order 添加到您的数据成员才能使其正常工作。

[DataContract(Name = "PROPERTY_ADDRESS", Namespace = "")]
public class PropertyAddress
{
[DataMember(Name = "STREET_NUM", Order=0)]
public string StreetNumber { get; set; }

[DataMember(Name = "STREET_ADDRESS", Order=1)]
public string StreetAddress { get; set; }

[DataMember(Name = "STREET_PREFIX", Order=2)]
public string StreetPrefix { get; set; }

[DataMember(Name = "STREET_NAME", Order=3)]
public string StreetName { get; set; }

[DataMember(Name = "STREET_TYPE", Order=4)]
public string StreetType { get; set; }

[DataMember(Name = "STREET_SUFFIX",Order=5)]
public string StreetSuffix { get; set; }
}

关于c# - 使用 DataContractSerializer 反序列化 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15413468/

26 4 0
文章推荐: c# - 如何在 ASP.NET Web API 中对后台任务进行排队
文章推荐: java - SOAP 消息的输入参数的大小限制是多少
文章推荐: Java 频谱图图像 : mp3 and microphone
文章推荐: c# - 将 List 转换为 List