Joa*_*nge 8 .net c# ienumerable serialization exception
我正在使用xml序列化,但现在遇到了我以前没见过的运行时错误.
"要进行XML可序列化,从IEnumerable继承的类型必须在其继承层次结构的所有级别都具有Add(System.Object)的实现.ImageEditor.EffectOptions不实现Add(System.Object)"
通过运行时异常强制实现方法似乎有点奇怪,而不是编译时间错误,例如实现的接口缺少方法.
这是设计的吗?这不应该通过某种类型的界面强制执行XmlSerializable吗?
除此之外,我想知道序列化程序是否保证传递正确类型的值,我可以将其转换为类型,在我的情况下EffectOption.
或者我应该实现此Add (object)方法以查看对象是否类型EffectOption,如果没有抛出异常?
我之前没有实现过这个Add (object)方法,但是我的猜测是EffectOption将它转换为EffectOptions集合并将其添加到集合中更安全.
编辑:这是类型本身:
public class EffectOptions : IEnumerable<EffectOption>
{
public List<EffectOption> Options { get; private set; }
//IEnumerable methods
}
Run Code Online (Sandbox Code Playgroud)
因为子类由于基类而隐式实现接口方法,但 xmlserializer 使用反射,这就是为什么您在运行时而不是编译时收到错误。
尝试明确地实施并看看会发生什么。我以前没有遇到过这个问题,所以我不确定你为什么会这样,除非你正在做一些定制的事情。
如果您的子类显式实现该接口,但不执行任何实现代码(让方法的隐式实现发生),则从您的子类型声明中删除该接口,因为由于您的基类型,它应该仍然有效。(有人告诉我我是否离开这里)