在我们的代码库中,任何需要保存的类都是IXmlSerializable,这意味着它们都具有公共无参数构造函数。
问题是,我必须在每个上面添加一条注释“仅用于序列化目的”,因为这些实例上的某些成员是私有的并且是必需的,因此在调用所有“可用”构造函数时都需要。
真正好的方法是说“这个构造函数只能通过序列化代码/程序集调用,否则我会爆炸”。任何人都知道有一个很好的方法来做到这一点?他们只能想到这个就是检查调用堆栈为什么听起来太贵了......
答案 0 :(得分:2)
怎么样:
[Obsolete("Is your name XmlSerializer? No, I didn't think so.", true)]
public Foo() { }
注意:此不会保护您免受反射,或来自where T : new()
约束的泛型,但它避免了new Foo()
场景的可能性。
答案 1 :(得分:1)
我有另一个解决方案:将你的'私有'构造函数移出你的类,并使用serialization surrogate - 这样你的魔术构造函数将永远不会在序列化之外使用,因为它现在是序列化过程的一部分本身。