2016-11-07 1 views
0

Je cette partie et xsd:xsd2code généré jette l'erreur de XmlChoiceIdentifierAttribute

<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> 

Avec ce code que je suis arrivé de 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, 
} 

Cela me donne cette sortie:

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

mais je voudrais être comme ça si StartTime est la sélection d'enum:

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

Mais quand j'utilise cette décoration (aussi de xsd2code):

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

je suis levé une exception en disant:

{ "membre manquant 'TimeElementName' nécessaire pour la sérialisation de choix 'Item'. "}

Je ne peux pas mettre le doigt sur pourquoi il jette cette erreur que je semble se souvenir r il fonctionnait avant d'éditer d'autres parties de ma classe et quand je débogue le code, le TimePeriod reçoit également les valeurs correctes et l'exception n'est pas levée jusqu'à ce que j'atteigne la ligne: var serializer = new XmlSerializer (this.GetType());

Existe-t-il un autre moyen d'obtenir la sortie désirée ou de résoudre cette exception?

Répondre

0

Je trouve que la partie manquante qui xsd2code n'a pas généré pour une raison quelconque était ces deux lignes de code qui a également été requis pour que cela fonctionne:

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

Ainsi, la décoration résultante sur Item est comme ceci:

[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