【发布时间】:2014-09-02 14:57:30
【问题描述】:
好的,我们都知道没有无参数构造函数的类不能使用 XmlSerializer,因为反序列化器将创建对象并设置所有属性。但是,通过使用 Activator.CreateInstance() 可以在没有无参数构造函数的情况下实例化类。例如,我们可以实例化以下类:
public class Foo
{
public Foo(string bar){}
}
这个类可以很容易地用 Activator 实例化:
Activator.CreateInstance(typeof(Foo),"some string");
不幸的是,'Foo' 不能使用 XmlSerializer 序列化,因为它没有无参数构造函数。为什么没有办法像那样使用 XmlSerializer:
new XmlSerializer(typeof(Foo)).Deserialize(stream,"some string");
当然,我可以实现我自己的序列化器,它只存储对象的类型和所有属性和字段,然后使用激活器实例化对象并设置以前存储的属性。问题是:这有意义吗?我想一定有一个强有力的理由反对,否则那已经实施了,对吧?!?
【问题讨论】:
-
请注意,对于要实施的功能,应该有“强烈的理由支持”,而不是“反对” - 请参阅Minus 100 points。涵盖非常狭窄的情况(如您所建议的)的东西很少能获得足够的“点”来实施。
-
就我个人而言,我认为重新发明轮子并不像使用现有的完善的解决方案(如 protobuf-net,它没有这些限制)那么有趣。
-
@Haney - 不是相反吗?重新发明轮子是最有趣的......否则为什么每个人都实现他们自己的日志框架......
-
@Haney 现在稳住了,你会让我脸红的......
-
@AlexeiLevenkov 我想这取决于你是否是一个内心的“修补匠”。但是当存在很多很多可行的替代方案时编写一个新的序列化程序似乎相对多余。马克 - 不涉及任何偏见。我推荐 protobuf-net 的唯一原因是 A) 我在过去的项目中非常成功地使用了它,并且 2) 它比
XmlSerializer更快、更容易、更灵活。我被XmlSerializer咬了很多次,我害怕。
标签: c# serialization activator