在C#中从序列化XML加载对象的最佳实践

时间:2008-10-16 09:13:01

标签: c# .net serialization xml-serialization

问候,

我有一个特定的对象,可以从文件构造,如下:

public class ConfigObj
{
     public ConfigObj(string loadPath)
     {
          //load object using .Net's supplied Serialization library
          //resulting in a ConfigObj object
          ConfigObj deserializedObj = VoodooLoadFunction(loadpath); 

          //the line below won't compile
          this = thisIsMyObj; 
     }
}

我想,在本质上,说“好的,现在这个对象我们刚刚被反序列化了,这是我们实际上的对象。”有几种方法可以做到这一点,我想知道哪种方法被认为是最好的做法。我的想法是:

  • 构建一个copy-into-me功能,按字段复制对象。这是当前的实现,我很确定这是一个可怕的想法,因为每当有新成员添加到对象时我还需要记住将它添加到'copy-into-me'函数中,并且没有办法可以维护
  • 为ConfigObj类构建一个静态方法,该方法充当加载对象的事实构造函数。这听起来好多了,但不是最好的练习。
但是,我对这两者中的任何一个都不满意。这里公认的最佳做法是什么?

3 个答案:

答案 0 :(得分:3)

您的第二个选项是所谓的factory method,是一种常见的设计技巧。如果您确实使用了这种技术,您可能会发现在实际加载类之前需要知道要加载的类的类型。如果遇到这种情况,可以使用更高级别的工厂类型来查看流,并为适当类型的类调用工厂方法。

答案 1 :(得分:2)

使用静态方法而不是构造函数没有任何问题。实际上,它有一个number of advantages

答案 2 :(得分:1)

我总是使用静态方法。通常它是一种加载的层次结构,因此只有根对象需要该方法。并且它在.NET框架中并不是一种非常不寻常的方法(例如Graphics.FromImage),因此对于您的类用户来说应该没问题。