我有以下 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 答案中,但只是为了完整性/清晰性:我做错的是在我的 DTO 中添加另一个级别 - 顶级类ArrayOfRESTDataSource
是实际上在 XML 中具有子项的那个,所以它就是那个那应该是一个集合类型。