就地反对序列化

时间:2013-05-24 17:36:37

标签: c# serialization

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

如果我想在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 对成员进行深层复制?

1 个答案:

答案 0 :(得分: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)

注意:我没有包含de / serializer代码,因为有许多不同的序列化器(xml,json,binary,...)。