标题有点令人困惑,希望有人可能知道我的问题更合适的标题。
我正在尝试创建一个派生自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])
,但这只是提供了插入一个项的机会。我考虑过使用foreach(Configuration c in temporaryObject
并逐个添加它们,但这不是最佳解决方案。
感谢任何提示!
编辑1:
我添加了foreach迭代以添加配置
internal void DeserializeFromBinaryFile(string path)
{
foreach (var c in Helper.GetObjectFromBinaryFile<Collection<Configuration>>(path))
{
Add(c);
}
}
这似乎工作正常。有人知道更好的模式吗?
答案 0 :(得分:1)
无论是否进行反序列化或其他操作,都无法将新的类实例分配给“this”。代码bellow只使用新的构造函数,也不起作用。基本上,此时你在内存中有不同的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);
}
}