将包含 IList 的对象序列化为 XML
本文关键字:序列化 XML 对象 包含 IList | 更新日期: 2023-09-27 18:33:04
所以我有一个名为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 也包含一些 ILists。
我怎样才能绕过这个错误,它发生在这一行:
var xm = new XmlSerializer(typeof(T));
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 更改为列表,那么最干净的方法是实现 IXmlSerializable
。还有其他使用抽象类型、反射和类似类型的解决方案,但我不会称之为干净。