生成的xsd2code从XmlChoiceIdentifierAttribute抛出错误

时间:2016-11-07 14:44:00

标签: c# xmlserializer xsd2code

我有.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

我被抛出异常说:

  

{&#34; Missing&#39; TimeElementName&#39;选择序列化所需的成员&#39;项目&#39;。&#34;}

我无法理解为什么它会抛出此错误,因为我似乎记得它在编辑我的课程的其他部分之前工作,当我调试代码时TimePeriod收到正确的错误值也是如此,并且在我点击此行之前不会抛出异常:     var serializer = new XmlSerializer(this.GetType());

是否有其他方法可以获得我想要的输出或解决此异常。

1 个答案:

答案 0 :(得分:0)

我发现xsd2code由于某种原因没有生成的缺少部分是这两行代码也是它需要工作的:

[System.Xml.Serialization.XmlElementAttribute("EndTime", typeof(System.DateTime))]
[System.Xml.Serialization.XmlElementAttribute("StartTime", typeof(System.DateTime))]

因此Item上产生的装饰是这样的:

[System.Xml.Serialization.XmlElementAttribute("Sluttidpunkt", typeof(System.DateTime))]
[System.Xml.Serialization.XmlElementAttribute("Starttidpunkt", typeof(System.DateTime))]
[System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemElementName")]
public System.DateTime Item