2011-02-23 51 views
1

我有一些類型的我想序列化爲XML,但是這些類型的具有隻讀屬性,如:爲什麼Xml Serializer需要屬性可寫?

public List<Effect> Effects {get; private set;} 

但XML序列化需要這些屬性是可寫的。

  1. 不是XML序列化使用反射,因此,實際上可以很容易地通過設置反映這些屬性,即使它們是隻讀的?

  2. 有沒有辦法解決這個問題,因爲我不希望這些類型可以被人編輯,所以這些屬性必須是隻讀的,但我也希望它們是xml可序列化的。

+0

可能重複[爲什麼不是我的公共屬性由XmlSerializer序列化?](http://stackoverflow.com/questions/575432/why-isnt-my-public-property-serialized-by-the-xmlserializer) – 2011-02-23 00:51:16

+0

Joan,你的問題的真正答案是:「因爲從.NET 1.0開始,它就是這樣,而且永遠不會改變。」 – 2011-02-23 06:34:28

+0

我明白了。我只是想知道是否有技術上的理由,比如「只讀變量甚至不能通過反射設置」等。但是,因爲這只是因爲設計決定,所以我現在明白了。 – 2011-02-23 17:44:16

回答

1

它不可能的,因爲在MSDN

XML序列如所提到的是將一個對象的公共屬性和字段以串行格式(在這種情況下,XML),用於存儲或過程運輸。

但是你可以使用DataContractSerializer。這裏是馬克的回答:一個鏈接SO

Serializing private member data

更新

如果保留自動實現的屬性得到了該行爲,並在財產以後這樣的:

private List<Effect> _Effects; 

public Effect() 
{ 
    _Effects= new List<Effects>(); 
} 

public List<Effect> Effect 
{ 
    get 
    { 
     return _Effects;   
    } 
} 
+0

感謝這仍然不能解釋爲什麼只讀屬性是不允許的,因爲我的屬性也是公共的。 – 2011-02-23 00:49:44

+0

@Joan:他們必須是public **讀/寫**屬性。 – 2011-02-23 00:55:20

+0

謝謝,但它能夠正確設置_Effects的值,一旦它完成那樣? (使用非自動屬性) – 2011-02-23 00:59:07

相關問題