我使用DataContract
s到反序列化,其中一个列表包装与额外增加的数据有问题。 XML的重要部分粘贴在这里,在本文后面有完整的XSD链接和文档。的DataContractSerializer上增强列表类型
<criteria>
<criterion>
<name>common-name</name>
<value>J350</value>
<matches>3</matches>
</criterion>
<criterion>
<name>designation</name>
<value>J350</value>
<matches>8</matches>
</criterion>
<matches>2</matches> <!-- only shows results matching all criteria -->
</criteria>
我在现在的问题是:
[CollectionDataContract(Namespace = "TheNamespace")]
public partial class SearchResultsCriteria : List<SearchResultsCriteriaInfo>
{
[DataMember(Name = "matches", Order = 1)] // fail
public int Matches { get; set; }
}
[DataContract(Name = "criterion", Namespace = "TheNamespace")]
public partial class SearchResultsCriteriaInfo
{
[DataMember(Name = "name", Order = 0)]
public string Name { get; set; }
[DataMember(Name = "value", Order = 1)]
public string Value { get; set; }
[DataMember(Name = "matches", Order = 2)]
public int Matches { get; set; }
// all other properties which can show up in the xml
}
现在的问题,当我反序列化这个使用DataContractSerializer
,我得到的预期,只有所有的值的Matches
上SearchResultsCriteria
列表通过为0. 我错过了什么让增强列表正确反序列化?我发现this msdn article帮助我解决了一些其他问题,但没有关于这个特定问题的任何信息。
编辑:为了事宜!
我在使用DataContract
反序列化时遇到了有关XML中元素顺序的this other msdn article。因此,从我所知道的情况看,问题似乎是订单无法确定,因为在标准匹配上方存在可变数量的<criterion>
元素。我希望能够确定标准匹配的顺序为1,并且只有一个标准被指定时,它才会起作用,因为我可以忍受这种情况。但是,如果我按照上面的规定在CollectionDataContract
中指定课程,那么这似乎不起作用。
对于更具体的方面,我试图写的thrustcurve.org api服务包装。
我标志着这个答案是正确的,因为你可以用'IExtensibleDataObject'做到这一点,但它是不可能的POCO的对象,所以我结束了使用XML序列化我的项目来代替。 – 2011-04-27 14:39:39