私は継承でデシリアライズしようとしています。XMLデシリアライゼーションの継承を使用
例えば、私はまもなく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が、彼らは自分自身のスキームを使用しています。私のmozillaの実装についてはOpenSearchのために
<?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>
を私はXMLをdeserialiseしようとすると、これが正常に動作します
[SerializableAttribute]
[XmlRoot(Namespace = "http://a9.com/-/spec/opensearch/1.1/", IsNullable = false, ElementName = "OpenSearchDescription")]
public class OpenSearch
{
public string ShortName { get; set; }
}
のようなクラスを持っている...
:
ので、彼らが持っています私はちょうどこのようなものが欲しい:
[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のコードを生成しようとするとエラーが発生するので、助けにはなりません...