سؤال

أنا أعمل على خدمة ويب لمشاركة البيانات بين نظامين لتخطيط موارد المؤسسات (ERP).يقوم نظام ERP الأول باستدعاء خدمة الويب، التي تقوم بإجراء تسلسل لكائن البيانات وإرساله إلى ERP الثاني.

يبدو كائن البيانات كما يلي:

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

الفئات التي تم إنشاؤها بواسطة XSD:

[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;}
        }
}

أقوم بإجراء تسلسل لكائنات البيانات الخاصة بي باستخدام XmlSerializer

المشكلة هي:(عند التسلسل) في كل مرة يكون فيها الكائن الفرعي فارغًا (xsi:nil="true") يقوم XSD بإنشاء بنية الطفل بالكامل على أي حال.ولأن الكمية ليست قابلة للعدم/لاغية يكتب XSD 0 كقيمة...مثله:

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

كنت أتوقع أن أحصل على شيء مثل هذا:

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

السؤال هو:هل هناك طريقة لمنع XSD من تحليل كائن xsi:nil="true"؟؟

أي اقتراحات؟

تيا

هل كانت مفيدة؟

المحلول

نعم،

حصلت عليها الان!عليك أن تضع علامة على كمية الخاصية مع XmlElementAttribute بشكل صريح!

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

ليس لدي أي فكرة عن سبب عدم إنشاء هذا تلقائيًا ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top