2014-12-04 51 views
1

所以我有一个名为FormType的对象。 它包含了一些字符串,布尔等序列化为XML包含IList的对象

但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)); 

回答

1

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

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

+0

会试试这个,但不知道这是可以接受的 - 为什么他们首先定义为IList? – user3437721 2014-12-04 16:39:59

+0

这对我来说不是问题:)询问谁实现了FormType类。在代码中使用或不使用接口有很多原因,这是一个非常广泛的问题。 – 2014-12-04 16:42:44