嗨我想序列化從一個類派生的對象的數組,我不斷使用C#擊中相同的錯誤。任何幫助深表感謝。派生類的C#XML序列化
顯然這個例子已經縮小爲了這篇文章在現實世界中的目的形狀將包含過多的不同形狀。
的Program.cs
namespace XMLInheritTests
{
class Program
{
static void Main(string[] args)
{
Shape[] a = new Shape[1] { new Square(1) };
FileStream fS = new FileStream("C:\\shape.xml",
FileMode.OpenOrCreate);
XmlSerializer xS = new XmlSerializer(a.GetType());
Console.WriteLine("writing");
try
{
xS.Serialize(fS, a);
}
catch (Exception e)
{
Console.WriteLine(e.InnerException.ToString());
Console.ReadKey();
}
fS.Close();
Console.WriteLine("Fin");
}
}
}
Shape.cs
namespace XMLInheritTests
{
public abstract class Shape
{
public Shape() { }
public int area;
public int edges;
}
}
Square.cs
namespace XMLInheritTests
{
public class Square : Shape
{
public int iSize;
public Square() { }
public Square(int size)
{
iSize = size;
edges = 4;
area = size * size;
}
}
}
錯誤: System.InvalidOperationException:不期望的類型XMLInheritTests.Square。使用XmlInclude或SoapInclude屬性指定靜態未知的類型。
在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterShapeA rray.Write2_Shape(字符串N,串NS,形狀O,布爾ISNULLABLE,布爾需要 型)
在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterShapeA rray.Write3_ArrayOfShape(對象o)
非常感謝
作爲一個方面 - 不,公共領域通常是*要避免;一個'public int Size {get; set;}'是更可取的。 – 2010-07-24 19:28:02
你也可以*將邊緣和大小作爲虛擬'get'屬性,這樣你就不需要**存儲它們。 – 2010-07-24 19:28:43