2009-06-18 105 views
2

是否有可能通過CodeDOM生成一個公共getter和受保護setter的屬性?目標是實現類似於以下內容的內容。公共getter,帶CodeDOM的受保護setter

[Serializable] 
public class Wrapper { 
    public Wrapper() { } 
    private string _Field; 
    public string Field { get; protected set; } 
} 

我有,我想編一個.NET包裝所以它會更容易使用.NET功能,如LINQ,反思,繼承和系列化與它的大型COM基於API。唯一可行的方法是通過代碼生成自動化大部分工作。

這些對象包含一些只讀屬性,我希望通過需要屬性設置器的序列化來公開。但是這麼長時間,我還沒有找到任何方法來設置受到保護或類似的設置。

一種方式是,以紀念財產不能序列化和序列化_Field但由於針對序列輸出一個目標是網絡我需要的屬性私有成員與直接串行所有可能串行屬性使用更清晰的名稱(不帶下劃線)進行序列化。出於同樣的原因,我相信自定義序列化是不可能的。

準確反序列化並不重要,即。在反序列化過程中價值仍然保持其原始價值並不重要。這些屬性只是爲了減少混淆,防止API消費者嘗試更改只讀字段並想知道爲什麼它們對任何內容都沒有影響。

+0

嗯。 XmlSerializer和JSON.Net JsonSerializer都可以序列化它。我一定記得錯誤的是序列化程序確保它們能夠在序列化時反序列化。所以最初的問題從來沒有,但我仍然想聽聽CodeDOM是否可以創建受保護的getter。 – 2009-06-19 00:20:46

回答

1

只是把它包起來。在CodeDOM保存原始字符串輸出沒有辦法做到這一點。

什麼來到XMLSerializer序列化器能夠序列化類,但它不會序列化值與受保護的setter。

所以不可能。我使用的另一種方法是爲這些類中的每一個生成一個ToSerializableType()方法,該方法返回具有所有屬性讀/寫的相似類的實例。

相關問題