XMLのシリアル化を解除しようとして本当に問題があり、誰かが何らかの支援を提供できることを望んでいました。私は多くの同様の投稿を読みましたが、これを解決することはできません。
XMLをデシリアライズしようとしています
<register-account success="false">
<user-name>xxxxx</user-name>
<password>fghgh</password>
<email>[email protected]</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-namespaceにないようです。また、XmlSerializer
では_[Serializable]
_は使用されません。
Xmlがネームスペースを使用している場合、ルートにxmlns
があります。
また、呼び出し元を支援するために、Deserialize
がパブリックパラメータレスを要求するため、XmlSerializer
メソッドにwhere T : class, new()
(追加である, new()
)を追加できます。コンストラクタ。