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