繁体   English   中英

如何在C#中为struct成员赋予XML序列化默认值

[英]How to attribute a struct member with a default value for xml serialization in c#

我喜欢C#中公共成员的自动xml序列化。 它为您节省了很多时间。 但是现在我可能已经达到极限了,或者您知道该怎么做吗?

我要实现的是在具有默认值的情况下不为成员写任何内容。 例如使用“ int”之类的标准类型,这很容易:

[XmlElement(ElementName = "Test", IsNullable = false), DefaultValue(0)]
public int Test = 0;

因此,只要“ Test”等于0,序列化就不会写入任何内容。

但是作为成员的结构呢? 例如:

    public struct Vector2 {
        public float x;
        public float y;

        public Vector2(float x = 0.0f, float y = 0.0f) {
           this.x = x;
           this.y = y;
        }
        ...
    }

    public class ToSerialize {
        [XmlElement(ElementName = "Shift", IsNullable = false), DefaultValue(new Vector2(0,0))]
        public Vector2 Shift = new Vector2(0, 0);
        ...
    }

这不起作用,因为“ new Vector2(0,0)”不是常量。 也许我只是无法弄清楚该属性的语法。 我该如何运作? 这个问题与编码的舒适度有关,所以我对诸如“编写您自己的序列化代码”之类的解决方案或导致代码冗长的其他建议不感兴趣。 如果您知道这不适用于自动序列化系统,那也将是一个答案。

在这种情况下,您可以使用技巧来序列化另一种类型。

[XmlIgnore]
public Vector2 Shift = new Vector2(0, 0);

[XmlElement("Shift")] // to have same name as original field/property
public string _Shift
{
    get { return ...; } // convert Vector2 to string
    set { Shift = ... value; } // opposite
}

您将必须选择类型(通常是string是最合适的)才能进行转换。

您的答案很可能在这篇文章中

它说明了如何创建一个布尔方法,该方法返回是否应该序列化该元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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