【问题标题】:Serialize to XML an object that contains IList将包含 IList 的对象序列化为 XML
【发布时间】:2014-12-04 16:30:16
【问题描述】:

所以我有一个名为 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 还包含一些 IList。

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

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

【问题讨论】:

    标签: c# .net xml serialization


    【解决方案1】:

    XmlSerializer 不能反序列化接口(除非您想在 FormType 对象上自己实现 IXmlSerializable)。这就是您看到该异常的原因。

    如果您将 IList 更改为 List,它应该像以下示例一样工作:

    [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。还有其他使用抽象类型、反射和类似的解决方案,但我不会称之为干净。

    【讨论】:

    • 会尝试这个,但不确定这是否可以接受 - 为什么首先将它们定义为 IList?
    • 这对我来说不是问题 :) 问谁实现了 FormType 类。在代码中使用或不使用接口的原因有很多,这是一个非常广泛的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多