0

对不起,如果这是一个微不足道的问题。

如果我想在 xml 中序列化我当前的对象,例如,我可以编写一个类似的方法

public void xml_serialize_save(string fname)
{
     System.Xml.Serialization.XmlSerializer x =
         new System.Xml.Serialization.XmlSerializer(this.GetType());

     x.Serialize(new System.IO.StreamWriter(fname), this);            
}

现在,假设我想以同样的方式反序列化它,我想要一个方法,例如

    public void xml_serialize_load(string fname)
    {
        System.Xml.Serialization.XmlSerializer x =
            new System.Xml.Serialization.XmlSerializer(this.GetType());

        this = (Data_param)x.Deserialize(new System.IO.StreamReader(fname));            
    }

这当然不起作用,因为分配给this.

问题是:

  1. 我是否有义务反序列化一个临时对象,比如说

     Data_param temp = (Data_param)x.Deserialize(new System.IO.StreamReader(fname)); 
    

    ?

  2. 然后我应该手动对成员temp进行深拷贝吗?this

4

1 回答 1

1

我通常处理这个问题的方法是创建一个普通/公共Serialize方法,以及一个随附的静态/共享Deserialize方法。像这样:

Public Class PersistantObject

  Public Sub Serialize(path as String)
    '  Do your serialization
  End Sub


  Public Shared Function Deserialize(path As String) As PersistantObject
    Dim result As PersistantObject = '  Assignment from deserializer

    Return result
  End Function

End Class

利用:

Dim obj As PersistantObject = PersistantObject.Deserialize(path)

obj.propertyA = newValue
obj.Serialize(path)

注意:我没有包含反序列化器代码,因为有许多不同的序列化器(xml、json、二进制......)。

于 2013-05-24T19:20:45.293 回答