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

时间:2014-12-04 16:30:17

标签: c# .net xml serialization

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

但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还包含一些IList。

如何绕过这个错误,它发生在这一行:

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

1 个答案:

答案 0 :(得分:2)

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更改为List,那么最简洁的方法是实现IXmlSerializable。还有其他解决方案使用抽象类型,反射和类似,但我不会称之为干净。