C# 就地对象反序列化
对不起,如果这是一个微不足道的问题 例如,如果我想用xml序列化当前对象,我可以编写如下方法C# 就地对象反序列化,c#,serialization,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.StreamW
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
我通常的处理方法是创建一个普通的/public
Serialize
方法,以及一个伴随的静态的/Shared反序列化方法。像这样:
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
使用:
注意:我没有包括反序列化程序代码,因为有许多不同的序列化程序(xml、json、二进制等)。试试这个:对于#2,您不需要手动完成,您可以使用显式:不,XmlSerializer不支持。它需要是XML吗?还是您的主要目标只是保存/加载数据?谢谢您的建议。我要买一个静态阅读器。
Dim obj As PersistantObject = PersistantObject.Deserialize(path)
obj.propertyA = newValue
obj.Serialize(path)