0

私は.xsdのこの部分を持っています:

  <xs:element name="TimePeriod" nillable="false">
    <xs:complexType>
      <xs:choice>
        <xs:element name="StartTime" type="xs:dateTime" nillable="false"/>
        <xs:element name="StopTime" type="xs:dateTime" nillable="false"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

xsd2code から取得したこのコードを使用します。

public partial class ActivityTYPETimePeriod
{
    private System.DateTime itemField;
    private ItemChoiceType itemElementNameField;

    public System.DateTime Item
    {
        get
        {
            return this.itemField;
        }
        set
        {
            this.itemField = value;
        }
    }

    [System.Xml.Serialization.XmlIgnoreAttribute()]
    public ItemChoiceType ItemElementName
    {
        get
        {
            return this.itemElementNameField;
        }
        set
        {
            this.itemElementNameField = value;
        }
    }
}

public enum ItemChoiceType
{
    /// <remarks/>
    StartTime,
    /// <remarks/>
    StopTime,
}

これにより、次の出力が得られます。

<TimePeriod>
    <Item>2016-11-07T09:50:41.27</Item>
</TimePeriod>

しかし、 StartTime が列挙型の選択である場合、私はこのようになりたいです:

<TimePeriod>
    <StartTime>2016-11-07T09:50:41.27</StartTime>
</TimePeriod>

しかし、この装飾を使用すると(xsd2codeからも):

[System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemElementName")]
public System.DateTime Item

次のような例外がスローされます。

{"選択項目 'Item' のシリアル化に必要な 'TimeElementName' メンバーがありません。"}

クラスの他の部分を編集する前にそれが機能していたことを覚えているようで、コードをデバッグするとTimePeriod正しい値も受信し、例外がスローされるまで例外がスローされないため、このエラーがスローされる理由に指を置くことはできません私はこの行をヒット: var serializer = new XmlSerializer(this.GetType());

目的の出力を取得したり、この例外を解決したりする別の方法はありますか?

4

1 に答える 1