对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的元素名称。
有什么想法吗?
修改
可以在线查看示例源代码here。
答案 0 :(得分:1)
我看到两个问题:您的测试架构没有定义名为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>
第二个问题是应使用XmlSchema
方法加载XmlSchema.Read()
个对象:
using (XmlReader reader = XmlReader.Create(xsdDir + xsdFile)) {
XmlSchema schema = XmlSchema.Read(reader, null);
. . .
}