【发布时间】:2018-08-29 02:21:28
【问题描述】:
给定以下 XML:
<RESPONSE version="10">
<RESULTS MyAttribute="1" />
</RESPONSE>
我可以这样反序列化它:
[XmlRoot("RESPONSE")]
public class Response
{
[XmlElement(ElementName = "RESULTS")]
public Results Results {get;set;}
}
public class Results
{
[XmlAttribute(AttributeName = "MyAttribute")]
public bool MyAttribute { get; set; }
}
var serializer = new XmlSerializer(typeof(Response));
var result = (Response)serializer.Deserialize(new StringReader(xml));
这很好用。 然而问题是我也想反序列化以下 XML,我不想复制 Response 类,我想使用通用方法。
<RESPONSE version="10">
<SOCCER AnotherAttribute="1" />
</RESPONSE>
我尝试过以下操作:
[XmlRoot("Response")]
public class Response<T>
{
public T Data {get;set;}
}
public class SoccerRoot
{
[XmlElement(ElementName = "SOCCER")]
public class Soccer {get;set;}
}
public class Soccer
{
[XmlAttribute(AttributeName = "AnotherAttribute")]
public bool AnotherAttribute {get;set;}
}
var serializer = new XmlSerializer(typeof(Response<SoccerRoot>));
var result = (Response<SoccerRoot>)serializer.Deserialize(new StringReader(xml));
但这不起作用,我也尝试过继承 Response 类但没有运气。
我收到以下错误:<xmlns='' > was not expected.
我的方法是否正确,或者在反序列化 XML 文件时不能使用通用方法?
【问题讨论】:
-
这在任何一种情况下都不起作用;
[XmlRoot("Response")]与<RESPONSE>不匹配。这是实际代码,还是您将其匿名化了?特别是,如果是这样:最后一个错误中提到的 xmlns 让我想知道那里的实际问题是否已经在匿名化中丢失了 -
我已经匿名了,有点抱歉,会修复它。 xmlns 根本不存在于 xml 中,xml 现在是正确的,我是用手机写的,所以我现在无法访问代码,但我认为您无论如何都能理解我所追求的概念?
标签: c# xml xml-deserialization