1

DataContractSerializerに完全に不満を感じているので、XmlSerializerでIXmlSerializableタイプを使用してWCFで起動して実行しようとしています。

IXmlSerializableXmlSchemaProviderをクラスに実装して、OperationContract用にシリアル化して[XmlSerializerFormat]を宣言しました。

複雑なスキーマを使用すると、WSDLを表示しようとすると次のエラーが発生します。

"Schema type information provided by IXmlSerializable is invalid: 
Reference to undeclared attribute group 'anAttributeGroupInMySchema'"

スキーマにはさまざまなインクルードがあります(この属性はそのうちの1つで宣言されています)。含まれているスキーマをコード(schema.Includes)に追加しましたが、役に立ちませんでした。

最も些細なサンプルプロジェクト(1つの要素と2つの属性を持つ単純なスキーマ、単純な対応するクラス、名前を付けます)でも、私はついにこのエラーを乗り越えましたが、すぐに次のことにぶつかります。

"WCF_IXmlSerializable.TestClass.TestSchemaProvider() must return a valid type 
name. Type 'TEST' cannot be found in the targetNamespace='www.test.com'."

残念ながら、有効な型名が何であるかわかりません。それは確かに私のXSD、AFAICSからの要素名ではありません。

何か案は?

編集:

ソースコードの例は、ここからオンラインで表示できます。

4

1 に答える 1

1

問題が 2 つあります。テスト スキーマでは という名前の型が定義されておらずTEST_CLASS、その名前の要素が定義されています。XSD は次のようになります。

<xs:schema xmlns="www.test.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="www.test.com">
  <xs:complexType name="TEST_CLASS">
    <xs:sequence>
      <xs:element name="TEST">
        <xs:complexType>
          <xs:attribute name="TYPE"/>
          <xs:attribute name="DURATION"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

2 番目の問題は、メソッドXmlSchemaを使用してオブジェクトをロードする必要があることです。XmlSchema.Read()

using (XmlReader reader = XmlReader.Create(xsdDir + xsdFile)) {
  XmlSchema schema = XmlSchema.Read(reader, null); 
  . . . 
}
于 2013-02-21T15:51:41.773 に答える