- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
显然,如果编译器不知道具体类型,就不可能序列化/反序列化接口(interface)。
我有一个只有接口(interface)的程序集 MyInterfaces
和一个程序集 MyImpl
以及这些接口(interface)的内部 实现。实例化看起来像这样:
MyInterfaces.IFoo foo = MyImpl.FooFactory.CreateFoo();
下面是汇编MyImpl
中的工厂:
IFoo CreateFoo()
{
return new Foo(); // Internal class!
}
下面是程序集 MyImpl
中的具体 Foo
类:
[DataContract]
internal class Foo : IFoo
{
[DataMember]
public string Bar
{
get;
set;
}
}
读取工厂创建的 IFoo
对象的类型允许序列化 IFoo
接口(interface):
var serializer = new DataContractSerializer(typeof(MyFooContainer),
new Type[] { container.Foo.GetType() });
serializer.WriteObject(writer, container);
反序列化时,无法推断出类型,因为我们没有对象可看!
var serializer = new DataContractSerializer(typeof(MyFooContainer),
new Type[] { /* CANNOT provide other assembly's internal type! */ });
container = (MyFooContainer)serializer.ReadObject(reader);
我希望序列化的 XML 足以让 DataContractSerializer
确定如何创建 MyImpl.Foo
对象,但没有。它告诉我:
“第 1 行位置 269 中的错误。元素‘http://schemas.datacontract.org/2004/07/MyAssembly:Foo’包含来自映射到名称‘http://schemas.datacontract.org/2004/07/MyImpl:Foo’的类型的数据。反序列化器不知道...”
问:使用 DataContractSerializer
,如何将接口(interface)反序列化为另一个程序集的内部派生类?
显然,拥有内部实现的公共(public)接口(interface)是有意义的。允许序列化也是有意义的。请帮忙!
有关此特定问题的更多信息:http://blogs.msdn.com/b/sowmy/archive/2008/10/04/serializing-internal-types-using-xmlserializer.aspx
最佳答案
您可以让提供接口(interface)实例的工厂有另一种方法来提供序列化程序来序列化/反序列化对象。这样,序列化程序就可以知道所有的内部类。
关于c# - 如何将接口(interface)反序列化为另一个程序集的内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16810386/
我是一名优秀的程序员,十分优秀!