簡體   English   中英

從XMLSerializer創建對象時初始化集合

[英]Initializing collection while creating object from XMLSerializer

我正在使用WCF DataContractSerializer對應用程序中的大型對象圖進行序列化和反序列化。 我的問題是,如果我有一個在字段聲明中初始化的集合,則DataContractSerializer不會運行該初始化,並且該集合最終為null。

例如:

class Test
{
    List<string> collection = new List<string>();

    public List<string> Collection 
    {
         get { return collection; } 
    }
}

序列化和反序列化此類之后,集合將為null而不是默認的new。 如果我將初始化移到屬性get中,則工作正常。

由於我有一個很大的對象圖,因此遍歷所有發生這種情況的地方都非常耗時。 我希望能以某種方式自動執行此操作。

更新:我正在使用WCF DataContractSerializer,所以我想這就是為什么它不初始化集合。

我的實體中有常規XML序列化程序時,它們可以處理遞歸引用嗎?

更新:好的,所以現在我陷入了困境……更具體地說,實體用於NHibernate,因此它們上確實具有DataContract / DataMember。 但是然后我將IList用於BelongsTo / HasMany屬性,而XMLSerializer也不對這些屬性進行序列化,並且由於沒有遞歸引用,所以也不可行。

因此,假設我們有一個使用IList並具有遞歸引用的類,有沒有一種方法可以對它進行序列化/反序列化並仍然運行默認的對象構造函數?

更新:做了一些更多的測試,看起來我將不得不提出自己的混合方案,因為NH需要IList,這將我限制在DCS上,並且它的標簽會出現問題...

XmlSerializer運行構造函數/ field-initialisers; 編寫的代碼應該沒問題。 您也許改用了DataContractSerializer (即WCF)? (DCS 運行構造函數)。

WCF的一個方便的技巧是:

get {
    return list ?? ( list = new List<string>() );
}

解決此問題的最簡單方法是在默認構造函數中初始化集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM