1

XSDからプロキシを生成すると、非常に奇妙な動作が発生します。XSDをフォローしていると仮定します(スキーマタグがすでに配置されていると仮定します)。プロキシを生成するために[サービス参照の追加]オプションを使用しています。

<xs:complexType name="Segment"><xs:sequence><xs:element name="Legs"><xs:complexType><xs:sequence><xs:element maxOccurs="unbounded" name="Leg"><xs:complexType><xs:sequence><xs:element name="Ticket" type="xs:string" /></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType></xs:element></xs:sequence></xs:complexType>

上記のXSDからプロキシを生成すると、次のようなタイプが取得されます

    /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.saffr.com/schema/itinerary")]
public partial class Segment : object, System.ComponentModel.INotifyPropertyChanged {

    private SegmentLeg[] legsField;

        /// <remarks/>
    [System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=5)]
    [System.Xml.Serialization.XmlArrayItemAttribute("Leg", IsNullable=false)]
    public SegmentLeg[] Legs {
        get {
            return this.legsField;
        }
        set {
            this.legsField = value;
            this.RaisePropertyChanged("Legs");
        }
    }

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName) {
        System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}

ここで問題が発生しました。SegmentLegタイプではなくLegにする必要があると思います。実際、パーサーはセグメント(メインの複合型)と子型を連結したものです。

何が間違っているのかわかりません。どんな提案も非常に高く評価されます。

/リズワン

4

1 に答える 1

0

xsd.exe で型名を推測するために使用される既定のメカニズムをオーバーライドできるカスタマイズを許可する方法を知りません。

XSDで遊ぶことができると仮定すると、タイプ/要素を匿名ではなくグローバルにすることができます。その方法で期待される結果が得られるかどうかを確認してください。

于 2012-04-25T11:01:39.233 に答える