【发布时间】:2012-04-13 09:40:34
【问题描述】:
以前有人问过这个问题,但答案对我不起作用:所以这里又是一个问题:)
我在尝试反序列化某些 XML 时遇到了很大的麻烦,希望有人能提供一些帮助。我已经阅读了很多类似的帖子,但我无法解决这个问题。
这是 XML
<register-account success="false">
<user-name>xxxxx</user-name>
<password>fghgh</password>
<email>test@example.com</email>
</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; }
}
反序列化方法
public static T Deserialize<T>(string data) where T : class
{
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) 中存在错误。 ---> System.InvalidOperationException:不是预期的。在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderData.Read5_data()
内部异常如下:
<register-account xmlns=''> was not expected.
问题的答案是从类中移除命名空间(移除 Namespace = "MyNamespace")。然而,该类是使用 xsd.exe 自动生成的一个非常大的库的一部分。我不想更改生成的类中的任何内容。是否仍然可以在无需修改课程的情况下解决此问题?
【问题讨论】:
-
假设这是整个 XML,那么您显示的 XML 没有命名空间(没有 xmlns 声明)。因此,从你的类的序列化参数中删除它是有意义的......或者,通过 XSD 重新生成你的类,使其在没有命名空间的情况下生成。
-
我认为 XSD.exe 不支持生成没有命名空间属性的类。
标签: .net xml xml-serialization