.NET自定义Xml序列化

时间:2010-02-19 18:51:40

标签: c# .net xml-serialization

我正在处理一些我需要序列化/反序列化为xml的类,可以用于配置。以下是我正在尝试做的一个示例

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

我想覆盖Uri属性被序列化的方式。因此,当调用serialize方法时,我希望它看起来像这样

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

有没有办法插入.net序列化并覆盖所有Uri对象的序列化和反序列化方式?请注意,我不想创建一个名为MyUri的类并将其用作SomeUri的类型,我只想插入序列化序列化Uri类型的位置并覆盖该行为。

2 个答案:

答案 0 :(得分: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; }
}

答案 1 :(得分:2)

由于您不想为Uri创建新的包装类,我认为您唯一的选择是MyConfig实现IXmlSerializable以便完全控制XML序列化过程

但是,如果你这样做,你会有一个全有或全无的方法,因为你需要完全实现序列化,而不仅仅是Uri属性。