问题描述
我有真正的麻烦试图反序列化一些XML,并希望有人能提供一些帮助。我读了很多类似的帖子,但我无法解决这个问题。
XML我试图反序列化
<注册账号成功=假>
<使用者名称>为XXXXX< /用户名称>
<密码> fghgh< /密码>
&LT;电子邮件&GT; [email protected]< /电子邮件&GT;
&LT;错误&GT;
&LT;错误code&GT; 120℃/错误code取代;
&LT; errormessage的&gt;该密码是无效的&LT; / errormessage的&GT;
&LT; /错误&GT;
&LT; /注册帐户&GT;
类我试图反序列化到:
[Serializable接口,XmlRoot(的ElementName =注册账户,命名空间=myNameSpace对象)]
[XmlType将(注册账户)]
公共类RegisterAccountResponse
{
[XmlAttribute(成功)
公共BOOL成功{获得;组; }
///&LT;总结&gt;
///获取或设置坦电子邮件地址
///&LT; /总结&gt;
[的XmlElement(电子邮件)
公共字符串电子邮件{获得;组; }
///&LT;总结&gt;
///获取或设置坦密码
///&LT; /总结&gt;
[的XmlElement(密码)
公共字符串密码{获得;组; }
///&LT;总结&gt;
///获取或设置用户名坦
///&LT; /总结&gt;
[的XmlElement(用户名)]
公共字符串的用户名{获得;组; }
///&LT;总结&gt;
有关该RegisterAccountRequest ///租客门户网站错误
///&LT; /总结&gt;
[的XmlElement(错误)
公共QubeError错误;
}
反序列化方法
公共静态牛逼反序列化&LT; T&GT;(字符串数据),其中T:类
{
如果(数据== NULL)
{
返回null;
}
如果(data.Trim()。长度== 0)
{
返回null;
}
VAR SER =新的XmlSerializer(typeof运算(T));
使用(VAR SR =新StringReader(数据))
{
返程(T)ser.Deserialize(SR);
}
}
反序列化方法调用
VAR数据= Helper.Deserialize&LT; RegisterAccountResponse&GT;(XML);
例外:
内部异常,如下所示:
&LT;注册帐户的xmlns =''&GT;是没有预料到。
简单地脱掉命名空间=
:
[XmlRoot(注册账户),XmlType将(注册账户)]
公共类RegisterAccountResponse {...}
因为你的XML似乎并不在一个XML命名空间。此外, [Serializable接口]
不使用的XmlSerializer
。
如果你的XML是使用一个命名空间,将有一个的xmlns
在根目录下。
此外,以帮助来电者可以添加其中T:类,新的()
(即,新的()
正在增加),以你的反序列化
方法,因为的XmlSerializer
需要一个公共的无参数的构造函数。
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:
Inner Exception as follows:
<register-account xmlns=''> was not expected.
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.
这篇关于错误反序列化XML到对象 - 的xmlns =''是没有预料到的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!