1

xsd から生成された c# クラスがあります。要素に価値を与えたいとき

result res = new result();
res.feed = "123132";

// これは res.data で機能します。ID と値が見つかりません。たとえば、どうすればよいですかres.data.id="something"

私は xml を持っています:

<result>
    <feed></feed>
    <status></status>
    <data>
        <id></id>
        <value></value> 
        <id></id> 
        <value></value> 
    </data>
</result>

この xsd を生成する:

  <xs:element name="result">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="feed"/>
        <xs:element type="xs:string" name="status"/>
        <xs:element name="data">
          <xs:complexType>
            <xs:choice maxOccurs="unbounded" minOccurs="0">
              <xs:element type="xs:string" name="id"/>
              <xs:element type="xs:string" name="value"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

xsd.exeを使用して、そのクラスを生成しました

public partial class result {

    private string feedField;

    private string statusField;

    private resultData dataField;

    /// <remarks/>
    public string feed {
        get {
            return this.feedField;
        }
        set {
            this.feedField = value;
        }
    }

    /// <remarks/>
    public string status {
        get {
            return this.statusField;
        }
        set {
            this.statusField = value;
        }
    }

    /// <remarks/>
    public resultData data {
        get {
            return this.dataField;
        }
        set {
            this.dataField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class resultData {

    private string[] itemsField;

    private ItemsChoiceType[] itemsElementNameField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("id", typeof(string))]
    [System.Xml.Serialization.XmlElementAttribute("value", typeof(string))]
    [System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemsElementName")]
    public string[] Items {
        get {
            return this.itemsField;
        }
        set {
            this.itemsField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("ItemsElementName")]
    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public ItemsChoiceType[] ItemsElementName {
        get {
            return this.itemsElementNameField;
        }
        set {
            this.itemsElementNameField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(IncludeInSchema=false)]
public enum ItemsChoiceType {

    /// <remarks/>
    id,

    /// <remarks/>
    value,
}
4

1 に答える 1

2

以下を行う必要があるようです

res.data = new resultData();
res.data.ItemsElementName = new [] 
{ 
    ItemsChoiceType.id,
    ItemsChoiceType.value,
    ItemsChoiceType.id,
    ItemsChoiceType.value,
};
res.data.Items = new [] 
{ 
    "id 1",
    "value 1",
    "id 2",
    "value 2",
};

基本的に、型と対応する値を含むように各配列を設定する必要があります。配列を作成するときは、それらの長さが同じで、型と値が同じ位置にある必要があります。

ただし、id と値のペアが必要な場合は、XML の構造を再考する必要があります。現時点では、id または値のみを入れることができ、順序やそれぞれが同じ数になることは保証されません。たぶん、次のようなものは、あなたが欲しいというよりも似ています。

<result>
    <feed></feed>
    <status></status>
    <data>
        <dataItem>
            <id></id>
            <value></value> 
        </dataItem>
        <dataItem>
            <id></id> 
            <value></value> 
        </dataItem>
    </data>
</result>
于 2016-01-26T15:05:46.567 に答える