2011-02-03 11 views
38

मुझे कुछ एक्सएमएल deserialize करने की कोशिश में असली परेशानी हो रही है और उम्मीद है कि कोई कुछ सहायता प्रदान कर सकता है। मैंने बहुत सी पोस्ट पढ़ी हैं लेकिन मैं इसे हल करने में असमर्थ हूं।ऑब्जेक्ट को एक्सएमएल में त्रुटि का वर्णन करना - xmlns = '' की उम्मीद नहीं थी

[Serializable, XmlRoot(ElementName = "register-account", Namespace = "MyNamespace")] 
[XmlType("register-account")] 
public class RegisterAccountResponse 
{ 
    [XmlAttribute("success")] 
    public bool Success { get; set; } 

    /// <summary> 
    /// Gets or sets the Tennant email address 
    /// </summary> 
    [XmlElement("email")] 
    public string Email { get; set; } 

    /// <summary> 
    /// Gets or sets the tennant password 
    /// </summary> 
    [XmlElement("password")] 
    public string Password { get; set; } 

    /// <summary> 
    /// Gets or sets the Tennant username 
    /// </summary> 
    [XmlElement("user-name")] 
    public string Username { get; set; } 

    /// <summary> 
    /// A Tenant Portal error relating to the RegisterAccountRequest 
    /// </summary> 
    [XmlElement("error")] 
    public QubeError Error; 
} 

Deserialization विधि

public static T Deserialize<T>(string data) where T : class 
    { 
     if (data == null) 
     { 
      return null; 
     } 

     if (data.Trim().Length == 0) 
     { 
      return null; 
     } 

     var ser = new XmlSerializer(typeof(T)); 

     using (var sr = new StringReader(data)) 
     { 
      return (T)ser.Deserialize(sr); 
     } 
    } 
:

एक्सएमएल मैं deserialize करने के लिए

<register-account success="false"> 
    <user-name>xxxxx</user-name> 
    <password>fghgh</password> 
    <email>[email protected]</email> 
    <error> 
    <errorcode>120</errorcode> 
    <errormessage>The password is invalid</errormessage> 
    </error> 
</register-account> 

कक्षा मैं करने के लिए deserialize कोशिश कर रहा हूँ का प्रयास कर रहा हूँ

Deserialization विधि कॉल

var data = Helper.Deserialize<RegisterAccountResponse>(xml); 

अपवाद:

वहाँ XML दस्तावेज़ (1, 2) में कोई त्रुटि है। ---> सिस्टम। इन्वाइडऑपरेशन अपवाद: अपेक्षित नहीं था। Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderData.Read5_data()

इनर अपवाद में इस प्रकार है:

<register-account xmlns=''> was not expected. 

उत्तर

48
इस तय निम्न कार्य पाया

बस Namespace =:

[XmlRoot("register-account"), XmlType("register-account")] 
public class RegisterAccountResponse {...} 

क्योंकि आपका एक्सएमएल एक्सएमएल-नेमस्पेस में प्रतीत नहीं होता है। इसके अलावा, [Serializable] का उपयोग XmlSerializer द्वारा नहीं किया जाता है।

यदि आपका एक्सएमएल नामस्थान का उपयोग कर रहा था तो रूट पर xmlns होगा।

इसके अलावा, कॉल करने के साथ मदद करने के लिए आप अपने Deserialize विधि करने के लिए जोड़ where T : class, new() (, new() अलावा जा रहा है), के बाद से XmlSerializer एक सार्वजनिक parameterless निर्माता की मांग कर सकता है।

+1

मार्क आप पर थे! मैं आपको धन्यवाद नहीं दे सकता क्योंकि मैं इस के साथ अपने बालों को फाड़ रहा था। – ProNotion

+0

आपको बहुत बहुत धन्यवाद! नेमस्पेस पर अतिरिक्त जानकारी मुझे आवश्यक समाधान था। – varagrawal

+0

क्या आप कृपया इस बारे में और बता सकते हैं कि कक्षा में "नेमस्पेस =" क्यों अनावश्यक है? – gfan

-1

मैं मेरे लिए

if (elem.Attribute(XNamespace.Xmlns + "xsi") == null) { 
    elem.Add(new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance")); 
} 

if (elem.Attribute(XNamespace.Xmlns + "xsd") == null) { 
    elem.Add(new XAttribute(XNamespace.Xmlns + "xsd", "http://www.w3.org/2001/XMLSchema")); 
} 
संबंधित मुद्दे