我真的很喜欢TWith2Sugars发布的扩展方法here。尽管我遇到了一个奇怪的问题。当我把这个变成一个共享的类库,并调用序列化功能,我得到以下错误:C#序列化扩展方法的问题
The type MyType was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.
我四处张望了一下,发现XmlSerializer的只能序列化类型,它是知道的。我将其解释为类库中的类,而不是我根据该库创建的项目。
有没有办法解决这个问题?这个函数可以放在类库中,还是需要放在每个使用它的项目中?
更新:
我想通了,是什么原因导致的问题。我有以下代码:
object o = new MyClass();
o.Serialize();
这是导致错误。当我将代码更改为:
MyClass c = new MyClass();
c.Serialize();
一切正常。所以,吸取教训 - 不要试图(去)序列化通用对象。我最喜欢的关于我引用的链接的东西是,我不必在我的类上放置任何XML属性标记。扩展方法刚刚工作。
为了解决这个问题,我将给出答案,以便扩展到Marc's answer(包括Marc)的任何人使用说明使用[XmlInclude]的代码示例。
我遇到的问题是当尝试序列化Foo时发生故障。传递一个额外类型的对象仍然会给出相同的错误。 – 2009-02-05 14:57:42