我有一个Point类,我想将其序列化为属性。以下是我真正想要的例子:
public class PointXY
{
[XmlIgnore]
public Double X { get; set; }
[XmlIgnore]
public Double Y { get; set; }
public override string ToString()
{
return Points;
}
}
public class TestClass
{
[XmlAttribute]
public PointXY Points { get; set; }
}
测试类应序列化为:
<TestClass Points="0.1 0.2">
</TestClass>
我知道如果使用IXmlSerializable接口实现TestClass,就可以实现这一点。但是我想要PointXY应该将自己作为属性而不是元素。可能吗?如果有,怎么样?这也应该反序列化。
答案 0 :(得分:1)
我不知道将整个类序列化为属性的方法。
您必须要实施IXmlSerializable
或将属性添加到TestClass
并将序列化作为属性:
public class TestClass
{
[XmlIgnore]
public PointXY Points { get; set; }
[XmlAttribute("Points")]
public string PointString
{
get
{
return string.Format("{0} {1}",Points.X, Points.Y);
}
set
{
// TODO: Add null checking, validation, etc.
string[] parts = value.Split(' ');
Points = new PointXY {X = double.Parse(parts[0]), Y = double.Parse(parts[1])};
}
}
}
答案 1 :(得分:0)
复杂对象通常被序列化为XML元素。遗憾的是,您无法在复杂类型上设置XmlAttribute,否则您将获得运行时异常。如果你绝对必须在这里使用Xml属性,你可以创建一个虚拟属性,它只返回你需要的数据。使用此代码:
public class TestClass
{
[XmlAttribute(@"Points")]
public string PointsString
{
get { return Points.ToString(); }
set { throw new NotSupportedException(); }
}
[XmlIgnore]
public PointXY Points { get; set; }
}