0

标题有点混乱,希望有人知道这个标题更适合我的问题。

我正在尝试创建一个派生自的类,Collection<Classname>以实现一种简单的方法来保存和加载配置文件。写入文件没问题,但我无法实现反序列化功能。我不确定如何将反序列化的内容分配回我的实例。

目前的做法:

[DataContract(Name = "Configurations", Namespace = "")]
public class Configurations : Collection<Configuration>
{
    internal void SerializeToBinaryFile(string path)
    {
        Helper.DumpObjectToBinaryFile(this, path);
    }

    internal void DeserializeFromBinaryFile(string path)
    {
       // Getting Error:
       // This expression can not be used as an assignment target
       this = Helper.GetObjectFromBinaryFile<Collection<Configuration>>(path);
    }
}

我很熟悉,this.Add([Configuration])但这只是提供了插入一项的机会。我考虑过使用 aforeach(Configuration c in temporaryObject并一个一个地添加它们,但这不是最好的解决方案。

感谢您的任何提示!

编辑1:

我添加了 foreach 迭代以添加配置

    internal void DeserializeFromBinaryFile(string path)
    {
        foreach (var c in Helper.GetObjectFromBinaryFile<Collection<Configuration>>(path))
        {
            Add(c);
        }
    }

这似乎工作正常。有人知道更好的模式吗?

4

1 回答 1

1

无论您是否进行反序列化或其他操作,都不能将类的新实例分配给“this”。下面的代码只使用了新的构造函数,也不起作用。基本上,此时您在内存中确实有不同的 2 个类实例。

public class Point
{
    public int X { get; set; }
    public int Y { get; set; }

    public void CreatePoint(int x, int y)
    {
        // Doesn't work either
        this = new Point();
    }
}

您必须在类的主体之外执行此操作,因此请使用静态反序列化方法:

[DataContract(Name = "Configurations", Namespace = "")]
public class Configurations : Collection<Configuration>
{
    internal void SerializeToBinaryFile(string path)
    {
        Helper.DumpObjectToBinaryFile(this, path);
    }

    internal static Configurations DeserializeFromBinaryFile(string path)
    {
        return Helper.GetObjectFromBinaryFile<Collection<Configuration>>(path);
    }
}
于 2013-02-04T10:40:12.743 回答