2013-02-04 57 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

非常感謝您! –