C# 就地对象反序列化

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

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

例如,如果我想用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


  • 我通常的处理方法是创建一个普通的/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)