我正在查看自定义属性序列化的人。我觉得这很简单,但我无法达到我想要的方式。
所以这是一个简单的例子:
班级定义:
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”解决方案。
答案 0 :(得分:3)
你可以:
IXmlSerializable
和
处理所有
序列化/反序列化
你的手动类型使用代理属性:
[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();
}
}