代码之家  ›  专栏  ›  技术社区  ›  Sauleil

如何创建自定义xmltattribute序列化

  •  8
  • Sauleil  · 技术社区  · 15 年前

    我在寻找谁来定制属性的序列化。我原以为这很简单,但我没能实现我想做的事情。

    下面是一个简单的例子:

    类定义:

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

    我想要的Xml结果:

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

    我唯一需要做的工作就是放置一个[XmlIgnore]属性,并用一些代码创建另一个属性来完成转换。

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

    另外,我尝试使用Type属性,但没有成功。(总是有例外)。但据我所知,它是针对已定义的数据类型的。

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

    另一个有趣的方法是:

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

    谢谢。


    编辑 由于没有出现像我所寻找的解决方案,我最终决定选择“IXmlSerializable”解决方案。

    1 回复  |  直到 15 年前
        1
  •  3
  •   SLaks    15 年前

    您可以:

    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();
          }
      }