无法序列化集合集合

时间:2016-08-25 16:53:53

标签: c# xml serialization xml-serialization xmlserializer

我有这种数据模型:

    public abstract class AbstractCollection
    {

    }

    public abstract class TypedAbstractCollection<T1> : AbstractCollection
    {

    }

    public class MyCollection<T> : TypedAbstractCollection<T>, IEnumerable<T>
    {
        private readonly List<T> _valueList = new List<T>();

        public IEnumerator<T> GetEnumerator()
        {
            return _valueList.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        public void Add(T value)
        {
            _valueList.Add(value);
        }
    }

    [XmlInclude(typeof(MyCollection<string>))]
    public class Shallow : IEnumerable<AbstractCollection>
    {
        private readonly List<AbstractCollection> _listOfCollections = new List<AbstractCollection>(); 

        public IEnumerator<AbstractCollection> GetEnumerator()
        {
            return _listOfCollections.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        public void Add(AbstractCollection sample)
        {
            _listOfCollections.Add(sample);
        }
    }

我在我的集​​合中使用IEnumerable和Add()函数自动将其序列化为集合,但是当我尝试用XML序列化它时:

        Shallow shallow = new Shallow
        {
            new MyCollection<string>
            {
                "first",
                "second"
            }
        };

        XmlSerializer formatter = new XmlSerializer(shallow.GetType(), 
            new[] { typeof(OneWayMapper<string, string>) });

        using (FileStream fs = new FileStream("data.xml", FileMode.OpenOrCreate))
        {
            formatter.Serialize(fs, shallow);
        }

我在没有任何必要信息的情况下遇到了奇怪的错误:

  

“MyCollection”类型可能不会在此上下文中使用

但是,如果我将使用带有类型项值的MyCollection类MyItem<T>而不会出现任何错误。 所以对于类型集合,抽象类等等都没关系,但对集合集合没有。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

我发现了一个问题。为了使它工作,我们必须使AbstractCollection继承IEnumerable。 而且这是可以理解的。