كيفية توليد XSI: عنصر لا مع سمات؟
-
26-09-2019 - |
سؤال
لدي عميل WCF يحتاج إلى إنشاء طلب يحتوي على جزء XML هذا:
<reason xsi:nil="true" nullFlavor="NA" typeCode="RSON" />
يتم تحديد المخطط بواسطة الخادم وليس تحت سيطرتي. يحتوي رمز الوكيل الذي تم إنشاؤه على فئة للعنصر الذي يحتوي على (من بين أشياء أخرى) nullFlavor
و typeCode
. يستخدم الوكيل XMLSerializer.
كيف يمكنني توليد مثل هذه الشظية؟ ينبعث XMLSerializer xsi:nil
سمة فقط إذا كان العضو المقابل لاغية. وإذا كان NULL ، فلا يمكن أن يكون لها خصائص تنبعث منها كسمات!
راجع للشغل ، الشظية قانونية وفقًا لمواصفات مثيل مخطط XML ، والتي تقول إن عنصر NIL لا يمكن أن يحتوي على أي عناصر طفل أو نص داخلي ، ولكن مايو تحتوي على سمات.
المحلول
هذا هو قيود معروفة لـ XMlSerializer. قد تكون قادرًا على الالتفاف عليها مع بعض الاستخدام الذكي للواجهة القابلة للاتصال IXMLSerializable وإبعاد XML يدويًا - لسوء الحظ ، لا يوجد حل نظيف أعرفه.
نصائح أخرى
هنا هو الحل الذي استخدمته لأولئك الذين ما زالوا يكافحون مع هذه المشكلة. إنه جزء من الاختراق ولكنه يعمل. قم بإيقاف تشغيل nillable وأضف ويسمة على النحو التالي
[XmlAttributeAttribute( AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance" )]
public bool NillAtt
{
get
{
return this.nillAtt;
}
set
{
nillAtt = value;
}
}