我有这种数据模型:
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>
而不会出现任何错误。
所以对于类型集合,抽象类等等都没关系,但对集合集合没有。
我该如何解决?
答案 0 :(得分:0)
我发现了一个问题。为了使它工作,我们必须使AbstractCollection继承IEnumerable。 而且这是可以理解的。