エラー "{"The type Device1 was not expected. XmlInclude または SoapInclude 属性を使用して、静的に認識されていない型を指定してください。"}"
現在私は持っています:
public abstract class Device
{
..
}
public class Device1 : Device
{ ... }
[Serializable()]
public class DeviceCollection : CollectionBase
{ ... }
[XmlRoot(ElementName = "Devices")]
public class XMLDevicesContainer
{
private DeviceCollection _deviceElement = new DeviceCollection();
/// <summary>Devices device collection xml element.</summary>
[XmlArrayItem("Device", typeof(Device))]
[XmlArray("Devices")]
public DeviceCollection Devices
{
get
{
return _deviceElement;
}
set
{
_deviceElement = value;
}
}
}
そして私はやっています:
XMLDevicesContainer devices = new XMLDevicesContainer();
Device device = new Device1();
device.DeviceName = "XXX";
device.Password = "Password";
devices.Devices.Add(device);
Serializer.SaveAs<XMLDevicesContainer>(devices, @"c:\Devices.xml", new Type[] { typeof(Device1) });
シリアライザーは次のことを行います。
public static void Serialize<T>(T obj, XmlWriter writer, Type[] extraTypes)
{
XmlSerializer xs = new XmlSerializer(typeof(T), extraTypes);
xs.Serialize(writer, obj);
}
シリアライザー メソッド (xs.Serialize) の最後の行で、"{"型 Device1 は予期されていませんでした。XmlInclude または SoapInclude 属性を使用して、静的に認識されていない型を指定してください。"}"
DeviceクラスにXmlIncludeを書いてみました。助けられませんでした。ラインを変えたら
[XmlArrayItem("Device", typeof(Device))]
することが
[XmlArrayItem("Device", typeof(Device1))]
それは機能しますが、複数のデバイスタイプの配列を書きたいです。