XML 反序列化不适用于抽象 class
XML Deserialization doesn't work with abstract class
我正在尝试将 xml 字符串反序列化为 object。但是我的对象总是空的。
我有一个摘要 class(响应),一个继承自 "Response"(DirectorSearchResponse)的 class,以及 class 中的一个 object "DirectorSearchResponse"(Header响应)。这个 object 在反序列化后总是 null。
Response.cs
public abstract class Response
{
public HeaderResponse Header { get; set; }
public Response()
{
}
}
DirectorSearchResponse.cs
[XmlRoot("xmlresponse")]
public class DirectorSearchResponse : Response
{
public DirectorSearchResponse() : base()
{
/* DO NOTHING */
}
}
HeaderResponse.cs
[XmlRoot("header")]
public class HeaderResponse
{
[XmlElement("toto")]
public String toto { get; set; }
public HeaderResponse()
{
}
}
我的运行代码:
/* DESERIALIZE */
String toto = "<xmlresponse><header><toto>tutu</toto><reportinformation><time>08/04/2016 13:33:37</time><reporttype> Error</reporttype><country>FR</country><version>1.0</version><provider>www.creditsafe.fr</provider><chargereference></chargereference></reportinformation></header><body><errors><errordetail><code>110</code><desc></desc></errordetail></errors></body></xmlresponse>";
XmlSerializer xsOut = new XmlSerializer(typeof(DirectorSearchResponse));
using (TextReader srr = new StringReader(toto))
{
DirectorSearchResponse titi = (DirectorSearchResponse)xsOut.Deserialize(srr);
}
当我执行我的代码时,object "titi" 是实例化的,但 "Header" 总是空的。
如何从 xml 中检索 "toto" 值?
您需要像这样将 link 添加到摘要 class 中:
[XmlRoot(ElementName = "Response")]
public abstract class Response
{
public HeaderResponse Header { get; set; }
public Response()
{
}
}
[XmlRoot(ElementName = "Response")]
public class DirectorSearchResponse : Response
{
public DirectorSearchResponse() : base()
{
/* DO NOTHING */
}
}
XML 区分大小写,因此您需要使用 [XmlElement("header")]
通知序列化程序 Header
属性:[=17= 的正确元素名称]
public abstract class Response
{
[XmlElement("header")]
public HeaderResponse Header { get; set; }
public Response()
{
}
}
您应用于HeaderResponse
的[XmlRoot("header")]
仅当它是XML文档的根元素时才控制其元素名称。
我正在尝试将 xml 字符串反序列化为 object。但是我的对象总是空的。
我有一个摘要 class(响应),一个继承自 "Response"(DirectorSearchResponse)的 class,以及 class 中的一个 object "DirectorSearchResponse"(Header响应)。这个 object 在反序列化后总是 null。
Response.cs
public abstract class Response
{
public HeaderResponse Header { get; set; }
public Response()
{
}
}
DirectorSearchResponse.cs
[XmlRoot("xmlresponse")]
public class DirectorSearchResponse : Response
{
public DirectorSearchResponse() : base()
{
/* DO NOTHING */
}
}
HeaderResponse.cs
[XmlRoot("header")]
public class HeaderResponse
{
[XmlElement("toto")]
public String toto { get; set; }
public HeaderResponse()
{
}
}
我的运行代码:
/* DESERIALIZE */
String toto = "<xmlresponse><header><toto>tutu</toto><reportinformation><time>08/04/2016 13:33:37</time><reporttype> Error</reporttype><country>FR</country><version>1.0</version><provider>www.creditsafe.fr</provider><chargereference></chargereference></reportinformation></header><body><errors><errordetail><code>110</code><desc></desc></errordetail></errors></body></xmlresponse>";
XmlSerializer xsOut = new XmlSerializer(typeof(DirectorSearchResponse));
using (TextReader srr = new StringReader(toto))
{
DirectorSearchResponse titi = (DirectorSearchResponse)xsOut.Deserialize(srr);
}
当我执行我的代码时,object "titi" 是实例化的,但 "Header" 总是空的。
如何从 xml 中检索 "toto" 值?
您需要像这样将 link 添加到摘要 class 中:
[XmlRoot(ElementName = "Response")]
public abstract class Response
{
public HeaderResponse Header { get; set; }
public Response()
{
}
}
[XmlRoot(ElementName = "Response")]
public class DirectorSearchResponse : Response
{
public DirectorSearchResponse() : base()
{
/* DO NOTHING */
}
}
XML 区分大小写,因此您需要使用 [XmlElement("header")]
通知序列化程序 Header
属性:[=17= 的正确元素名称]
public abstract class Response
{
[XmlElement("header")]
public HeaderResponse Header { get; set; }
public Response()
{
}
}
您应用于HeaderResponse
的[XmlRoot("header")]
仅当它是XML文档的根元素时才控制其元素名称。