我有下面的XML:XML DataContractDeserialization需要帮助
<?xml version="1.0" ?>
<Responses>
<ResponseList>
<Response type="XXX">
<Foo>YYYY</Foo>
<Bar>ZZZZ</Bar>
</Response>
</ResponseList>
</Responses>
我应该我的课的样子,这样我可以反序列化字符串转换为对象(我使用的是的DataContractSerializer)
[DataContract(Namespace = "")]
[Serializable]
public class Responses : DataContainer
{
[DataMember]
public ResponseCollection ResponseList { get; set; }
}
[Serializable]
public class Response : DataContainer
{
[DataMember]
public string Foo { get; set; }
[DataMember]
public string Bar { get; set; }
}
[Serializable]
public class ResponseCollection : List<Response>
{
}
我实际上能够使用DataContractSerializer ....我的目标是利用DataContractSerializer将一个XML字符串(一个响应)反序列化到一个对象中,并且我得到了两个属性的NULL(foo &酒吧)。
[Serializable]
[DataContract(Namespace = "")]
public class Responses : DataContainer
{
[DataMember(Name = "ResponseList")]
public Response[] Response { get; set; }
}
[Serializable]
[DataContract(Namespace = "")]
public class Response : DataContainer
{
[DataMember(Order = 0)]
public string Foo { get; set; }
[DataMember(Order = 1)]
public string Bar { get; set; }
}
当遇到类似的问题在过去,我已经建立了一个尽可能接近xml定义的类,创建一个实例并使用给定的测试数据填充它,然后序列化它。 将结果与给定的xml输入进行比较并调整,直到它通过测试。然后,您应该能够反序列化到该类。我也很好奇,看看有没有更简单的方法。 – asawyer 2011-12-29 21:44:29
你不能用'DataContractSerializer'来做你想做的事。它不使用属性。 – 2011-12-29 22:16:19
@John Saunders - 实际上,DataContractSerializer确实使用属性,如问题中的示例代码所示。请参阅[DataMemberAttribute](http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datamemberattribute.aspx),[DataContractAttribute](http://msdn.microsoft.com/zh-cn/ library/system.runtime.serialization.datacontractattribute.aspx)和[DataContractSerializer](http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx) – Nathan 2011-12-29 22:34:02