Error Deserializing Xml to Object - xmlns='' was not expected

100,129

Solution 1

Simply take off the Namespace =:

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

since your xml doesn't seem to be in an xml-namespace. Also, [Serializable] isn't used by XmlSerializer.

If your xml was using a namespace it would have an xmlns at the root.

Also, to help with callers you could add where T : class, new() (the , new() being the addition) to your Deserialize method, since XmlSerializer demands a public parameterless constructor.

Solution 2

Nothing worked here for me

What worked is to MAKE SURE that the C# Class (main class) you are trying to map/deserialize the xml string to HAS AN XmlRootAttribute that matches the root element of the response.

Check my full answer with an exmaple https://stackoverflow.com/a/61525536/1594274

Share:
100,129
ProNotion
Author by

ProNotion

Certified Umbraco Developer, C# .Net Developer, keen photographer, married and father to two great boys.

Updated on July 09, 2022

Comments

  • ProNotion
    ProNotion almost 2 years

    I am having real trouble trying to deserialize some XML and was hoping someone can offer some assistance. I have read a lot of similar posts but I am unable to resolve this.

    XML I am attempting to 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>
    

    Class I am trying to deserialize to:

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

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

    Deserialization Method Call

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

    Exception:

    There is an error in XML document (1, 2). ---> System.InvalidOperationException: was not expected. at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderData.Read5_data()

    Inner Exception as follows:

    <register-account xmlns=''> was not expected.
    
  • ProNotion
    ProNotion over 13 years
    Marc you were spot on! I can't thank you enough as I had been tearing my hair out with this one.
  • varagrawal
    varagrawal about 10 years
    Thank you so much! The extra info on the namespace was the solution I needed.
  • gfan
    gfan about 9 years
    Could you please tell more about why the "Namespace =" in the class is needless?
  • Marc Gravell
    Marc Gravell about 9 years
    @gfan because the xml in the question does not include that namespace; the xml and the model/deserializer need to match. Specifically, there is no xmlns="MyNamespace", or xmlns:someAlias="MyNamespace"
  • Tyler
    Tyler about 6 years
    FYI, this seems to work the opposite way as well. Leaving off the namespace when a namespace is expected resulted in a similar error for me.
  • Sebastian
    Sebastian almost 4 years
    I'm dealing with cXML files that I generated classes via .dtd -> Vidual Studio -> XML -> Create Schema -> xsd.exe /classes. After removing the Namespace Attribute from everything I get a valid object tree. Thanks man
  • Myster
    Myster over 3 years
    This was my solution also I had [XmlRoot(ElementName = "RESPONSE")] instead of [XmlRoot(ElementName = "response")]