这个问题以前被问过,但答案不适用于我:所以这里是问题再次:)当XML没有命名空间时,如何反序列化装有XmlRoot命名空间的类?
我真的有麻烦试图反序列化一些XML,并希望有人可以提供一些援助。我读过很多类似的帖子,但我无法解决这个问题。
这里是XML
<register-account success="false">
<user-name>xxxxx</user-name>
<password>fghgh</password>
<email>[email protected]</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重新生成类,以使其不需要名称空间即可生成。 – Reddog 2012-03-29 18:14:12
我不认为XSD.exe支持生成没有名称空间属性的类。 – 2012-03-29 18:34:14