XSD.exe忽略简单的复杂类型
我们有一个很大的wcf服务,还有一个很大的xsd文档,我们有几个元素和复杂的类型。 我们使用xsd.exe生成代码,并使用WCF服务的ServiceContract
上的XmlSerializerFormat
来再次序列化这些对象。
现在我们遇到了xsd.exe和字符串数组的定义问题。
图像我们有以下元素定义..
<xs:element name="Configuration" type="Configuration"/>
<xs:complexType name="Configuration">
<xs:sequence>
<xs:element name="Name" type="xs:string"/>
<xs:element name="Parameters" type="Parameters" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Parameters">
<xs:sequence>
<xs:element name="Parameter" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
这将导致:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://mynamespace.com/")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://mynamespace.com/", IsNullable=false)]
public partial class Configuration {
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string Name;
/// <remarks/>
[System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlArrayItemAttribute("Parameter", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
public string[] Parameters;
}
正如您所看到的,xsd.exe工具足够聪明,可以查看复杂类型的Parameters
,因此它使其成为string[]
。
问题是,如果我们在我们的WCF服务中使用它,它将创建ArrayOfString
复杂类型,而不是我们的Parameters
复杂类型。 更糟糕的是,我们有几个字符串[]导致了ArrayOfString1
, ArrayOfString2
, ArrayOfString3
等等。
问题是:我们如何避免XSD变扁我们的Parameters
complextype?
上一篇: XSD.exe ignores simple complextypes
下一篇: Group by in LINQ