Проблема с моим кодом заключалась в том, что я пытался назначить новый экземпляр объекту Reporter в методе Read:
m_reporter = (Reporter)formatter.Deserialize(stream);
т.е. Десериализация возвращает новый экземпляр объекта. Этот новый экземпляр назначен в методе Read и, следовательно, доступен в области действия метода Read. Он рассматривает m_reporter как локальную переменную. Таким образом, как только мы выйдем из области действия метода Read, репортер получит исходное состояние.
Таким образом, создание свойства (как предложено @Gaurav) в классе PropertyFileReader и его использование делает этот новый экземпляр доступным даже вне метода Read. Затем мы должны индивидуально назначить все свойства свойства исходному экземпляру.
Итак, я изменил код, как показано ниже:
public Reporter(String filePath, FileType type)
{
PropRnW = new PropertyFileReader(filePath, type);
this.Property1 = PropRnW.m_reporter.Property1;
this.Property2 = PropRnW.m_reporter.Property2;
}
class PropertyFileReader
{
public Reporter m_reporter {get; set;}
public PropertyFileReader(String filePath, FileType type)
{
OriginalPath = filePath;
Type = type;
this.Read();
}
private void Read()
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(SavePath, FileMode.Open, FileAccess.Read);
m_reporter = (Reporter)formatter.Deserialize(stream);
stream.Close();
}
};