這個問題以前被問過,但答案不適用於我:所以這裏是問題再次:)當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