【发布时间】:2011-12-17 23:16:31
【问题描述】:
我正在尝试使用继承进行反序列化。
例如,我有一个opensearch的类
简而言之,XSD 是这样的:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://a9.com/-/spec/opensearch/1.1/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="OpenSearchDescription">
<xs:complexType>
<xs:sequence>
<xs:element name="ShortName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Mozilla impements this 但他们使用自己的方案。
所以他们有:
<?xml version="1.0" encoding="Windows-1252"?>
<xs:schema xmlns:os="http://a9.com/-/spec/opensearch/1.1/" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.mozilla.org/2006/browser/search/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://a9.com/-/spec/opensearch/1.1/" />
<xs:element name="SearchPlugin">
<xs:complexType>
<xs:sequence>
<xs:element ref="os:ShortName" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
对于 opensearch,我有一个类似
的类[SerializableAttribute]
[XmlRoot(Namespace = "http://a9.com/-/spec/opensearch/1.1/", IsNullable = false, ElementName = "OpenSearchDescription")]
public class OpenSearch
{
public string ShortName { get; set; }
}
当我尝试反序列化 xml 时,这很好用...
对于我的 mozilla 实现,我只想要这样的东西:
[System.SerializableAttribute]
[XmlRoot(Namespace = "http://www.mozilla.org/2006/browser/search/", IsNullable = false, ElementName = "SearchPlugin")]
public class SearchPlugin
{
public OpenSearch OpenSearch { get; set; }
}
但是,每当我尝试反序列化 SearchPlugin 对象时,OpenSearch 对象只是 NULL。
我应该怎么做?我尝试通过使用 xsd.exe 生成代码来为自己创建一个示例,但是当我尝试为 SearchPlugin.xsd 生成代码时,我也不断收到错误,所以这没有帮助...
【问题讨论】:
标签: c# xml serialization xsd