大きなwcfサービスと、いくつかの要素と複雑なタイプを持つ大きなxsdドキュメントがあります。xsd.exeを使用してコードを生成しXmlSerializerFormat
、ServiceContract
for the WCFサービスを使用して、これらのオブジェクトを再度シリアル化します。
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ツールは、complextypeを表示するのに十分スマートParameters
であるため、。になりstring[]
ます。
問題は、これをWCFサービスで使用するとArrayOfString
、複合型ではなくParameters
複合型が作成されることです。さらに悪いことに、いくつかのstring []があり、結果として、、などArrayOfString1
が発生します。ArrayOfString2
ArrayOfString3
問題は、XSDが複合型をフラット化するのをどのように回避できるかということParameters
です。