爲什麼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