繁体   English   中英

xml序列化和继承的类型

[英]xml serialization and Inherited Types

我收到错误“ {”。Device1类型未预期。 使用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))]

然后就可以了,但是我想写多个设备类型的数组。

您必须为要在XMLDevicesContainer类上可用的每个子类添加XmlIncludeAttribute。

[XmlRoot(ElementName = "Devices")]
[XMLInclude(typeof(Device1))]
[XMLInclude(typeof(Device2))]
public class XMLDevicesContainer
{
:
}

声明您的XmlSerializer ,如下所示:

XmlSerializer xs = new XmlSerializer(typeof(obj), extraTypes);

我以前实现的WCF Web服务也有同样的问题。 我有(object obj)作为参数,并且我像new XmlSerializer(typeof(object))一样声明了XmlSerializer ,它不是静态已知的。 将其更改为new XmlSerializer(obj.GetType())解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM