我有以下XML:
<?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字符串(响应)反序列化为一个对象,并为这两个属性(foo&bar)获取空值。
[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; }
}
最佳答案
(此回答提前说明需要DataContractSerializer的编辑)
如果我正确理解这个例子,那么如下所示。注意:其他属性没有坏处,但XmlSerializer不使用这些属性-我只展示了XmlSerializer使用的那些属性。
[XmlRoot("Responses")]
public class TxTNotifyResponse : DataContainer
{
[XmlArray("ResponseList")]
[XmlArrayItem("Response")]
public MsgResponseCollection MsgResponseList { get; set; }
}
public class MsgResponse : DataContainer
{
[XmlElement("Foo")]
public string Status { get; set; }
[XmlElement("Bar")]
public string MessageId { get; set; }
}
public class MsgResponseCollection : List<MsgResponse>
{
}
如果这不起作用(我还没有测试过),尝试使用单独的DTO模型。最简单的方法是将数据放在XML文件(例如,your.xml)中,并使用(在命令提示下):
xsd.exe your.xml
xsd.exe your.xsd /classes
它会写你的.cs