我有一些類型的我想序列化爲XML,但是這些類型的具有隻讀屬性,如:爲什麼Xml Serializer需要屬性可寫?
public List<Effect> Effects {get; private set;}
但XML序列化需要這些屬性是可寫的。
不是XML序列化使用反射,因此,實際上可以很容易地通過設置反映這些屬性,即使它們是隻讀的?
有沒有辦法解決這個問題,因爲我不希望這些類型可以被人編輯,所以這些屬性必須是隻讀的,但我也希望它們是xml可序列化的。
我有一些類型的我想序列化爲XML,但是這些類型的具有隻讀屬性,如:爲什麼Xml Serializer需要屬性可寫?
public List<Effect> Effects {get; private set;}
但XML序列化需要這些屬性是可寫的。
不是XML序列化使用反射,因此,實際上可以很容易地通過設置反映這些屬性,即使它們是隻讀的?
有沒有辦法解決這個問題,因爲我不希望這些類型可以被人編輯,所以這些屬性必須是隻讀的,但我也希望它們是xml可序列化的。
它不可能的,因爲在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;
}
}
感謝這仍然不能解釋爲什麼只讀屬性是不允許的,因爲我的屬性也是公共的。 – 2011-02-23 00:49:44
@Joan:他們必須是public **讀/寫**屬性。 – 2011-02-23 00:55:20
謝謝,但它能夠正確設置_Effects的值,一旦它完成那樣? (使用非自動屬性) – 2011-02-23 00:59:07
可能重複[爲什麼不是我的公共屬性由XmlSerializer序列化?](http://stackoverflow.com/questions/575432/why-isnt-my-public-property-serialized-by-the-xmlserializer) – 2011-02-23 00:51:16
Joan,你的問題的真正答案是:「因爲從.NET 1.0開始,它就是這樣,而且永遠不會改變。」 – 2011-02-23 06:34:28
我明白了。我只是想知道是否有技術上的理由,比如「只讀變量甚至不能通過反射設置」等。但是,因爲這只是因爲設計決定,所以我現在明白了。 – 2011-02-23 17:44:16