![](/img/trans.png)
[英]Error Deserializing Xml to Object - {<string xmlns='http://tempuri.org/'> was not expected.}
[英]Error Deserializing Xml to Object - xmlns='' was not expected
我在嘗試反序列化一些 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);
例外:
XML 文檔中存在錯誤 (1, 2)。 ---> System.InvalidOperationException: 不是預期的。 在 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 命名空間中。 此外, XmlSerializer
不使用[Serializable]
。
如果您的 xml 正在使用命名空間,那么它的根將有一個xmlns
。
此外,為了幫助調用者,您可以將where T : class, new()
(該, new()
是添加)添加到您的Deserialize
方法中,因為XmlSerializer
需要一個公共無參數構造函數。
沒有什么對我有用
有效的是確保您嘗試將 xml 字符串映射/反序列化為與響應的根元素匹配的 XmlRootAttribute 的 C# 類(主類)。
用一個例子檢查我的完整答案https://stackoverflow.com/a/61525536/1594274
我發現執行以下操作為我解決了這個問題
if (elem.Attribute(XNamespace.Xmlns + "xsi") == null) {
elem.Add(new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"));
}
if (elem.Attribute(XNamespace.Xmlns + "xsd") == null) {
elem.Add(new XAttribute(XNamespace.Xmlns + "xsd", "http://www.w3.org/2001/XMLSchema"));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.