我有以下一段XML数据:
<ArrayOfRESTDataSource xmlns="http://SwitchKing.Common/Entities/RESTSimplified/2010/07" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<RESTDataSource>
<Description>MyTest</Description>
<Enabled>true</Enabled>
</RESTDataSource>
</ArrayOfRESTDataSource>
RESTDataSource
可以出现 0-n 次。
以下是我的类:
[DataContract( Namespace = "http://SwitchKing.Common/Entities/RESTSimplified/2010/07" )]
public class ArrayOfRESTDataSource
{
public RESTDataSource[] Data { set; get; }
}
[DataContract( Namespace = "http://SwitchKing.Common/Entities/RESTSimplified/2010/07" )]
public class RESTDataSource
{
[DataMember]
public bool Enabled { get; set; }
[DataMember]
public string Description { get; set; }
}
我从服务器上读取了上述XML数据,方法如下:
WebRequest client = WebRequest.Create( "http://server:80/datasources" );
using( StreamReader sr = new StreamReader( client.GetResponse().GetResponseStream()) ) {
string xml = sr.ReadToEnd();
var response = ServiceStack.Text.XmlSerializer.DeserializeFromString<ArrayOfRESTDataSource>( xml );
}
我的问题是:我需要更改或修饰public RESTDataSource[] Data
的什么内容,才能使数组反序列化正常工作?对单个RESTDataSource项进行序列化可以正常工作,只有数组无法正常工作。
提前致谢。
更新1
根据@mythz的建议,我将代码更新为这样,但是response.Data仍然为空。我没有理解什么?
[DataContract( Namespace = "http://SwitchKing.Common/Entities/RESTSimplified/2010/07" )]
public class ArrayOfRESTDataSource
{
[DataMember]
public DataSource Data { set; get; }
}
[CollectionDataContract( ItemName = "RESTDataSource" )]
public class DataSource : List<RESTDataSource>
{
public DataSource() { }
public DataSource( IEnumerable<RESTDataSource> collection ) : base( collection ) { }
}
更新2
解决方案在下面@mythz的答案中,但为了完整性和清晰度:我做错的是在我的DTOs中添加了另一个级别 - 顶级类ArrayOfRESTDataSource
实际上有XML中的子项,因此它应该是集合类型。
CollectionDataContract
,否则它就不匹配XML布局。非常感谢您写得非常好的答案mythz,我相信这些信息也会帮助其他人。 - Per