[英]How to optimize xml serialization with "empty/default value" nodes in c#?
[英]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.