将包含 IList 的对象序列化为 XML

本文关键字:序列化 XML 对象 包含 IList | 更新日期: 2023-09-27 18:33:04

所以我有一个名为FormType的对象。它包含一些字符串,布尔值等。

但 FormType 也包含以下内容:

   private IList<FormTypeVersion> _versions = new List<FormTypeVersion>();
    public virtual IList<FormTypeVersion> Versions
    {
        get { return _versions; }
        set { _versions = value; }
    }

这就是我收到此错误的原因吗:

{"Cannot serialize member 'Domain.FormType.Versions' of type 'System.Collections.Generic.IList`1

另外 - FormTypeVersion 也包含一些 ILists。

我怎样才能绕过这个错误,它发生在这一行:

var xm = new XmlSerializer(typeof(T));

将包含 IList 的对象序列化为 XML

XmlSerializer不能反序列化接口(除非您想在 FormType 对象上自己实现 IXmlSerializable)。这就是为什么你看到这个例外。

如果将 IList 更改为"列表",它的工作方式应如以下示例所示:

[Serializable]
public class FormType
{
    private List<FormTypeVersion> _versions = new List<FormTypeVersion>();
    public virtual List<FormTypeVersion> Versions
    {
        get { return _versions; }
        set { _versions = value; }
    }
}

如果您没有奢侈地将类型从 IList 更改为列表,那么最干净的方法是实现 IXmlSerializable 。还有其他使用抽象类型、反射和类似类型的解决方案,但我不会称之为干净。

相关文章: