Erreur lors de la désérialisation de Xml en object – xmlns = ”

J’ai vraiment du mal à désérialiser du XML et j’espérais que quelqu’un puisse offrir de l’aide. J’ai lu beaucoup de messages similaires mais je suis incapable de résoudre ce problème.

XML que je tente de désérialiser

 xxxxx fghgh test@example.com  120 The password is invalid   

Classe que j’essaye de désérialiser pour:

 [Serializable, XmlRoot(ElementName = "register-account", Namespace = "MyNamespace")] [XmlType("register-account")] public class RegisterAccountResponse { [XmlAtsortingbute("success")] public bool Success { get; set; } ///  /// Gets or sets the Tennant email address ///  [XmlElement("email")] public ssortingng Email { get; set; } ///  /// Gets or sets the tennant password ///  [XmlElement("password")] public ssortingng Password { get; set; } ///  /// Gets or sets the Tennant username ///  [XmlElement("user-name")] public ssortingng Username { get; set; } ///  /// A Tenant Portal error relating to the RegisterAccountRequest ///  [XmlElement("error")] public QubeError Error; } 

Méthode de désérialisation

  public static T Deserialize(ssortingng 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 SsortingngReader(data)) { return (T)ser.Deserialize(sr); } } 

Méthode de désérialisation appel

 var data = Helper.Deserialize(xml); 

Exception:

Il y a une erreur dans le document XML (1, 2). —> System.InvalidOperationException: n’est pas attendu. à Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderData.Read5_data ()

Exception intérieure comme suit:

  was not expected. 

Enlevez simplement l’ Namespace = :

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

puisque votre fichier XML ne semble pas se trouver dans un espace de noms XML. En outre, [Serializable] n’est pas utilisé par XmlSerializer .

Si votre XML utilisait un espace de noms, il aurait un xmlns à la racine.

En outre, pour vous aider avec les appelants, vous pouvez append where T : class, new() (le , new() étant l’ajout) à votre méthode Deserialize , puisque XmlSerializer exige un constructeur public sans paramètre.

J’ai trouvé ce qui suit corrigé pour moi

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