2009-03-18 3 views
0

Ich arbeite an einem Webservice, um Daten zwischen zwei ERP-Systemen zu teilen. Das erste ERP ruft den Webservice auf, der das Datenobjekt serialisiert und an das zweite ERP sendet.Wie man das Verhalten der XML-Serialisierung auf xsi steuert: nill =

Ein Datenobjekt sieht wie folgt aus:

<xs:complexType name="Parent"> 
     <xs:sequence> 
      <xs:element ref="ta:ReceiptLine" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="Child"> 
     <xs:sequence> 
      ... 
      <xs:element name="SerialNo" type="xs:string" nillable="true" minOccurs="0"/> 
      <xs:element name="Quantity" type="xs:int" nillable="false"/> 
      ... 
     </xs:sequence> 
    </xs:complexType> 
    ... 
    <xs:element name="Child" type="ta:Child" nillable="true"/> 

Die von XSD generierten Klassen:

[System.Serializable] 
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://FSM4TA/DataObjects/")] 
    [System.Xml.Serialization.XmlRootAttribute(Namespace="http://FSM4TA/DataObjects/", IsNullable=false)] 
public partial class Parent { 
    private Child[] child; 

    [System.Xml.Serialization.XmlElementAttribute("Child", IsNullable=true)] 
     public Child[] Child { 
      get {return this.child;} 
      set {this.child = value;} 
} 

[System.Serializable] 
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://FSM4TA/DataObjects/")] 
    [System.Xml.Serialization.XmlRootAttribute(Namespace="http://FSM4TA/DataObjects/", IsNullable=true)] 
    public partial class Child{ 
     private string serialNo; 
     private int quantity; 

     [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] 
     public string SerialNo { 
      get {return this.serialNo;} 
      set {this.serialNo = value;} 
     } 

     public int Quantity { 
      get { return this.quantity;} 
      set {this.quantity = value;} 
     } 
} 

ich meine Datenobjekte mit XmlSerializer

Das Problem Ist Serialisierung: (Bei der Serialisierung) Jedes Mal, wenn das Child-Objekt leer ist (xsi: nil = "true"), generiert XSD die gesamte Child-Struktur trotzdem. Und weil Menge nicht nillable/nullable XSD ist schreibt als Wert ... So:

<Parent> 
    <Child xsi:nil="true"> 
    <SerialNo xsi:nil="true" /> 
    <Quantity>0</Quantity> 
    </Child> 
</Parent> 

ich erwartet hatte, so etwas zu bekommen:

<Parent> 
    </Child xsi:nil="true"> 
</Parent> 

Die Frage ist: Ist gibt es eine Möglichkeit zu verhindern, dass XSD ein xsi analysieren: nil = "true" -Object ??

Irgendwelche Vorschläge?

TIA

+0

Ihre Antwort ist hier http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/430972b0 -40a6-41f9-9590-57cfceb9a0e3? Prof = erforderlich –

Antwort

1

ok,

Ich habe es jetzt! Sie müssen die Eigenschaft Menge mit dem XmlElementAttribute explizit markieren!

[XmlElement(IsNullable=false)] 
public int Quantity { 
     get { return this.quantity;} 
     set {this.quantity = value;} 
    } 

Keine Ahnung, warum diese automatisch wurde nicht generiert ...

Verwandte Themen