InvalidOperationException
このコードを実行しようとすると、エラーが発生します。
サンプルコード
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
namespace XMLSerializationExample
{
class Program
{
static void Main(string[] args)
{
Caravan c = new Caravan();
c.WriteXML();
}
}
[XmlRoot("caravan", Namespace="urn:caravan")]
public class Caravan
{
[XmlElement("vehicle")]
public Auto Vehicle;
public Caravan()
{
Vehicle = new Car {
Make = "Suzuki",
Model = "Swift",
Doors = 3
};
}
public void WriteXML()
{
XmlSerializer xs = new XmlSerializer(typeof(Caravan));
using (TextWriter tw = new StreamWriter(@"C:\caravan.xml"))
{
xs.Serialize(tw, this);
}
}
}
public abstract class Auto
{
public string Make;
public string Model;
}
public class Car : Auto
{
public int Doors;
}
public class Truck : Auto
{
public int BedLength;
}
}
内部例外
{"型 XMLSerializationExample.Car は予期されていませんでした。XmlInclude または SoapInclude 属性を使用して、静的に認識されていない型を指定してください。"}
質問
このコードを修正するにはどうすればよいですか? 他にすべきことはありますか?
次のものはどこに置くのですか?
[XmlInclude(typeof(Car))]
[XmlInclude(typeof(Truck))]
Auto
またはクラスの上に属性を配置Caravan
しても機能しません。以下の例のようにタイプを直接追加してXmlSerializer
も機能しません。
XmlSerializer xs = new XmlSerializer(typeof(Caravan), new Type[] {
typeof(Car), typeof(Truck) });