gpt4 book ai didi

c# - 将 Xml 反序列化为对象时出错 - xmlns ='' 不是预期的

转载 作者:IT王子 更新时间:2023-10-29 03:55:39 24 4
gpt4 key购买 nike

我在尝试反序列化某些 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);

异常:

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

内部异常如下:

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

最佳答案

只需去掉 Namespace =:

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

因为您的 xml 似乎不在 xml 命名空间中。此外,[Serializable] 未被 XmlSerializer 使用。

如果您的 xml 使用命名空间,它的根目录将有一个 xmlns

此外,为了帮助调用者,您可以将 where T : class, new() (, new() 作为添加)添加到您的 Deserialize 方法,因为 XmlSerializer 需要公共(public)无参数构造函数。

关于c# - 将 Xml 反序列化为对象时出错 - xmlns ='' 不是预期的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4884383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com