如何创建自定义XmlAttribute序列化

时间:2010-11-28 21:43:04

标签: c# xml-serialization

我正在查看自定义属性序列化的人。我觉得这很简单,但我无法达到我想要的方式。

所以这是一个简单的例子:

班级定义:

Class MyClass
{
    [XmlAttribute("myAttribute")]
    public int[] MyProperty { get; set; }
}

我想要的Xml结果:

<MyClass myAttribute="1 2 3... N" />

我所做的唯一工作就是放置一个[XmlIgnore]属性并使用一些代码创建另一个属性来进行转换。

所以,我的问题是,有没有比创建新房产更好的方法?也许你可以创建某种类型的TypeConverter,以便序列化器使用它?

另外,我尝试使用Type属性但没有成功。 (总是得到例外)。但是从我读过的内容来看,它已经定义了数据类型。

[XmlAttribute("myAttribute", typeof(MyConverter))]
public int[] MyProperty { get; set; }

另一种有趣的方式是:

[XmlAttribute("myAttribute")]
[XmlConverter(typeof(MyConverter))]
public int[] MyProperty { get; set; }

感谢。


编辑 由于没有提出像我一样的解决方案,我最终决定选择“IXmlSerializable”解决方案。

1 个答案:

答案 0 :(得分:3)

你可以:

  1. 实施IXmlSerializable和 处理所有 序列化/反序列化 你的手动类型
  2. 使用代理属性:

    [XmlIgnore]
    public int[] MyProperty { get; set; }
    
    
    [XmlAttribute("myAttribute")]
    public string _MyProperty
    {
        get
        {
            return string.Join(" ", MyProperty.Select(x => x.ToString()).ToArray());
        }
        set
        {
            MyProperty = value.Split(' ').Select(x => int.Parse(x)).ToArray();
        }
    }