我在尝试反序列化某些XML时遇到了麻烦,希望有人可以提供一些帮助。我已经阅读了很多类似的帖子,但我无法解决这个问题。
XML我试图反序列化
<register-account success="false">
<user-name>xxxxx</user-name>
<password>fghgh</password>
<email>test@example.com</email>
<error>
<errorcode>120</errorcode>
<errormessage>The password is invalid</errormessage>
</error>
</register-account>
我正在尝试反序列化为:
[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;
}
反序列化方法
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);
}
}
反序列化方法调用
var data = Helper.Deserialize<RegisterAccountResponse>(xml);
例外:
XML文档中存在错误(1, 2)。 ---&GT; System.InvalidOperationException:是的 没想到。在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderData.Read5_data()
内部异常如下:
<register-account xmlns=''> was not expected.
答案 0 :(得分:49)
只需取消Namespace =
:
[XmlRoot("register-account"), XmlType("register-account")]
public class RegisterAccountResponse {...}
因为你的xml似乎不在xml命名空间中。此外,[Serializable]
未使用XmlSerializer
。
如果你的xml使用的是命名空间,它的根目录会有xmlns
。
另外,为了帮助调用者,您可以向where T : class, new()
方法添加, new()
(Deserialize
添加),因为XmlSerializer
需要公共无参数构造函数。< / p>
答案 1 :(得分:1)
这里没有任何帮助
有效的方法是确保您尝试将xml字符串映射/反序列化为具有与响应的根元素匹配的XmlRootAttribute的C#类(主类)。
检查我的完整答案答案 2 :(得分:-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"));
}