Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WCF中使用XmlSerializer序列化IXmlSerializable类型_Wcf_Xml Serialization_Xsd_Xmlserializer_Ixmlserializable - Fatal编程技术网

在WCF中使用XmlSerializer序列化IXmlSerializable类型

在WCF中使用XmlSerializer序列化IXmlSerializable类型,wcf,xml-serialization,xsd,xmlserializer,ixmlserializable,Wcf,Xml Serialization,Xsd,Xmlserializer,Ixmlserializable,我对DataContractSerializer非常失望,我正尝试使用XmlSerializer中的IXmlSerializable类型在WCF中启动并运行 我已经在类中实现了IXmlSerializable和XmlSchemaProvider,以便为OperationContract序列化并声明[XmlSerializerFormat] 使用复杂模式,我在尝试查看WSDL时遇到以下错误: "Schema type information provided by IXmlSerializable

我对DataContractSerializer非常失望,我正尝试使用XmlSerializer中的IXmlSerializable类型在WCF中启动并运行

我已经在类中实现了IXmlSerializable和XmlSchemaProvider,以便为OperationContract序列化并声明[XmlSerializerFormat]

使用复杂模式,我在尝试查看WSDL时遇到以下错误:

"Schema type information provided by IXmlSerializable is invalid: 
Reference to undeclared attribute group 'anAttributeGroupInMySchema'"
该模式具有各种包含(该属性在其中一个包含中声明)。我甚至在代码中添加了包含的模式(
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中的元素名

有什么想法吗

编辑:


示例源代码可以在线查看。

我发现两个问题:您的测试模式没有定义名为
test\u 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>

我发现了两个问题:您的测试模式没有定义名为
test\u 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>

你能发布最简单示例的代码吗?添加到原始帖子中。你能发布最简单示例的代码吗?添加到原始帖子中。感谢你的见解!我不能为这个帐户投票,但我会投100倍!我花了整整一天的时间。。。另一个艰苦学习的好例子。这引发了许多其他问题(其他地方的对话主题),但最突出的问题似乎是相关的:使用原始声明(根元素,而不是complexType)的XSD是否被视为无效?我问这个问题是因为A)XmlSpy报告了一个有效的模式,B)我从正在使用的已发布模式中复制了格式以复制错误-它也会犯同样的“错误”。@TomTom:不客气。您的原始架构是有效的-问题是
XmlSchemaProvider
机器需要复杂类型的名称,或者直接需要
XmlSchemaComplexType
对象,而您提供的是元素定义的名称。感谢您的理解!我不能为这个帐户投票,但我会投100倍!我花了整整一天的时间。。。另一个艰苦学习的好例子。这引发了许多其他问题(其他地方的对话主题),但最突出的问题似乎是相关的:使用原始声明(根元素,而不是complexType)的XSD是否被视为无效?我问这个问题是因为A)XmlSpy报告了一个有效的模式,B)我从正在使用的已发布模式中复制了格式以复制错误-它也会犯同样的“错误”。@TomTom:不客气。您的原始模式是有效的-问题是
XmlSchemaProvider
机器需要复杂类型的名称或直接是
XmlSchemaComplexType
对象,而您提供的是元素定义的名称。