2010-02-19 69 views
2

我正在處理一些我需要序列化/反序列化到XML的類,可以用於配置。這裏是什麼,我試圖做.NET自定義Xml序列化

[Serializable] 
public class MyConfig 
{ 
    [XmlElement] 
    public string ConfigOption { get; set; } 
    [XmlElement] 
    public Uri SomeUri { get; set; } 
} 

我要重寫該URI屬性被序列化方式的樣本。因此,當序列化方法被調用時,我希望它看起來像這樣

<MyConfig> 
    <ConfigOption></ConfigOption> 
    <SomeUri uri="" /> 
</MyConfig> 

有沒有辦法插到.NET系列化,覆蓋所有的URI對象的序列化和反序列化?請注意,我不想創建一個名爲MyUri的類,並使用它作爲SomeUri的類型,我只想插入序列化序列化Uri類型並覆蓋該行爲的地方。

+1

XML序列化中的[Serializable]被忽略。 – Cheeso 2010-02-19 18:53:55

+0

可能的重複:http://stackoverflow.com/questions/2211859/xml-serializing-arrays-with-typearray-in-net/2211921 – 2010-02-19 18:57:00

+1

順便說一句,_all_ XML序列化是「自定義」。 – 2010-02-19 18:59:14

回答

3
public class MyConfig 
{ 
    [XmlElement] 
    public string ConfigOption { get; set; } 
    [XmlElement] 
    public MyUri SomeUri { get; set; } 
} 

public class MyUri 
{ 
    [XmlAttribute(Name="uri")] 
    public Uri SomeUri { get; set; } 
} 
+0

是的,這將工作,但我不想創建另一個類來包裝我需要序列化/反序列化不同的任何對象。我想插入到這個屬性被序列化的地方,並控制它應該是什麼樣子。 – 2010-02-19 19:07:47

+0

有沒有這樣的地方。唯一的選擇是完全接管序列化。 – 2010-02-19 19:12:39

+0

此外,如果您使用XmlSerializer與該代碼它不會工作,因爲Uri沒有默認的構造函數,它不能用XmlSerializer序列化,如果你想有一個Uri對象序列化,你必須實現IXmlSerializable,然後接管需要的地方。如果要使用XmlSerializer,將它作爲字符串存儲在公共可序列化屬性中會更容易。 – 2010-08-11 19:52:38

2

既然你不希望創建一個新的包裝類Uri,我認爲你唯一的選擇是爲了有過XML序列化過程中完全控制MyConfig實施IXmlSerializable

但是,如果你這樣做,你將有一個全或無的方法,因爲你需要完全實現序列化,而不僅僅是Uri屬性。