كيفية إلغاء تسلسل وثيقة XML مع مساحة اسم مسبوقة ولكن لا عناصر مسبوقة نانو ثانية؟
-
19-08-2019 - |
سؤال
ولدي وثيقة XML من مصدر خارجي.
<?xml version="1.0" encoding="utf-8"?>
<ns0:Info xmlns:ns0="http://www.ZomboCorp.com/">
<Name>Anthony</Name>
<Job>Developer</Job>
</ns0:Info>
وأحتاج إلى إلغاء تسلسل ذلك إلى كائن مثل هذا.
public class Info
{
public String Name { get; set; }
public String Job { get; set; }
}
والمستخدمة كما هو، وSerializer
يطرح InvalidOperationException
ولم يكن من المتوقع <Info xmlns='http://www.ZomboCorp.com/'>
.
إذا أضيف [XmlElement(Namespace = "http://www.ZomboCorp.com/")]
إلى تعريف الفئة، وSerializer
بإرجاع كائن Info
الجديد مع خصائص فارغة.
المحلول 2
xsd.exe (أ أداة VS) ولدت مخطط من ملف XML ثم ملف فئة من المخطط. اقترح
[XmlType(AnonymousType = true, Namespace = "http://www.ZomboCorp.com/")]
[XmlRoot(Namespace = "http://www.ZomboCorp.com/", IsNullable = false)]
public class Info
{
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Name { get; set; }
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Job { get; set; }
}
ولكن، كنت قادرا على الابتعاد مع
[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "http://www.ZomboCorp.com/")]
public class Info
{
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Name { get; set; }
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public String Job { get; set; }
}
نصائح أخرى
لديك لإضافة السمة XmlElement إلى كل الممتلكات أيضا، تعيين الخاصية النطاق إلى سلسلة فارغة (لا يورث مساحة الاسم في الوضع الخاص بك).
وتعريفك للمعلومات ينبغي أن تبدو هذه:
XmlRoot(Namespace = "http://www.ZomboCorp.com/")]
public class Info
{
[XmlElement(Namespace = "")]
public String Name { get; set; }
[XmlElement(Namespace = "")]
public String Job { get; set; }
}
وبعد ذلك سوف إلغاء تسلسل بشكل صحيح.
لا تنتمي إلى StackOverflow