[英]Serialize Class as attribute
我有一个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,则可以实现。 但是我想要的PointsXY应该将自身显示为属性而不是元素。 可能吗? 如果是,怎么办? 这也应该反序列化。
我不知道一种将整个类序列化为属性的方法。
你会要么必须实现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])};
}
}
}
复杂对象通常被序列化为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; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.