繁体   English   中英

将类序列化为属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM