2010-02-19 68 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属性。