كيفية إلغاء تسلسل وثيقة XML مع مساحة اسم مسبوقة ولكن لا عناصر مسبوقة نانو ثانية؟

StackOverflow https://stackoverflow.com/questions/465825

سؤال

ولدي وثيقة 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; }
}

وبعد ذلك سوف إلغاء تسلسل بشكل صحيح.

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