对不起,如果这是一个微不足道的问题。
如果我想在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
,当然不起作用。
问题是:
我不得不对一个临时对象进行反序列化,比如说
Data_param temp = (Data_param)x.Deserialize(new System.IO.StreamReader(fname));
?
我是否应该亲自从temp
到 this
对成员进行深层复制?
答案 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,...)。