我有.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());
是否有其他方法可以获得我想要的输出或解决此异常。
答案 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