为什么XmlSerializer
在连载ICar
时序列化全部为Car
? ..不仅仅是从ICar
序列化A
?C#,为什么XmlSerializer会序列化基础对象而不是接口?
我觉得这很奇怪,因为我看这个在调试的时候,icars
仅包含A
,但test.xml
有A
,B
和C
。
示例代码:
//IMPLEMENTATION
Cars cars = new Cars();
ICars icars = cars;
var iXmls = new XmlSerializer(typeof(Cars));
using (TextWriter iTw = new StreamWriter("test.xml"))
{
iXmls.Serialize(iTw, icar);
}
//CLASS
[XmlRootAttribute("Cars")]
public class Cars : ICar
{
private string _A = "Car A";
private string _B = "Car B";
private string _C = "Car C";
public string A { /* get.. set.. */}
public string B { /* get.. set.. */}
public string C { /* get.. set.. */}
}
//INTERFACE
public interface ICars
{
string A;
}
XML结果:
<Cars>
<A>Car A</A>
<B>Car B</B>
<C>Car C</C>
<Cars>
期待得到这个(但没有):
<Cars>
<A>Car A</A>
<Cars>
序列化仅适用于具体的类型,而接口只定义的行为(没有状态)......您可能需要使用抽象类,而不是达到你在找什么.. – sajoshi 2011-04-18 03:27:32
@sajoshi因为你不能有一个抽象类的实例,你也不能序列化到/从它。 – 2011-04-18 12:20:56