2013-02-04 56 views
0

标题有点混淆,希望有人可能知道我的问题更合适的标题。反序列化与DataContract集合<Class>派生类

我想创建一个派生自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); 
     } 
    } 

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

回答

1

无论您是在进行反序列化还是其他操作,您都无法将类的新实例分配给“this”。代码波纹只是使用新的构造函数,也不起作用。基本上,在这一点上你在内存中有两个不同的类。

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); 
    } 
} 
+0

非常感谢您! –