2011-02-03 16 views
38

gerçek sorun bazı XML serisini çalışıyorum yaşıyorum ve birisi bazı yardım sunabilir umuyordum beklenmiyordu. Çok fazla benzer yazı okudum ancak bunu çözemiyorum.Hata - 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; 
} 

Seri kaldırma Yöntemi

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); 
     } 
    } 
:

XML ben hiç serisini çalışıyorum

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

Class serisini çalışılıyor

Seri kaldırma Yöntemi Çağrı

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

İstisna: XML belgesi (1, 2) 'de bir hata var

. ---> System.InvalidOperationException: beklenmiyor. Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderData.Read5_data()

İç İstisna de şöyle:

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

cevap

48
benim için aşağıdaki sabit yaparken buldum

:

Basitçe Namespace = çıkarmak

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

xml bir xml-ad alanında olmak görünmüyor çünkü. Ayrıca [Serializable], XmlSerializer tarafından kullanılmaz.

xml bir ad alanı kullanıyordum Eğer kökünde bir xmlns olurdu. XmlSerializer kamu parametresiz yapıcı talep beri

Ayrıca arayanlar ile yardımcı olmak için, sizin Deserialize yöntemine where T : class, new() ( , new() ilave olarak) ekleyebilirsiniz.

+1

Marc sen nokta! Saçlarımı yırttığım için sana yeterince teşekkür edemem. – ProNotion

+0

Çok teşekkür ederim! İsim alanındaki ekstra bilgi, ihtiyacım olan çözümdü. – varagrawal

+0

Sınıftaki "Namespace =" nin neden gereksiz olduğu hakkında daha fazla bilgi verebilir misiniz? – gfan

-1

Ben

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")); 
} 
İlgili konular