是否有一个属性可以跳过c#的xml序列化中的空数组?(Is there an attribute to skip empty arrays in the xml-serialization of c#?)
是否有一个属性可以跳过c#的xml序列化中的空数组? 这会增加xml输出的可读性。
Is there an attribute to skip empty arrays in the xml-serialization of c#? This would increase human-readability of the xml-output.
最满意答案
那么,你可以添加一个ShouldSerializeFoo()方法:
using System; using System.ComponentModel; using System.Xml.Serialization; [Serializable] public class MyEntity { public string Key { get; set; } public string[] Items { get; set; } [EditorBrowsable(EditorBrowsableState.Never), Browsable(false)] public bool ShouldSerializeItems() { return Items != null && Items.Length > 0; } } static class Program { static void Main() { MyEntity obj = new MyEntity { Key = "abc", Items = new string[0] }; XmlSerializer ser = new XmlSerializer(typeof(MyEntity)); ser.Serialize(Console.Out, obj); } }ShouldSerialize{name} patten被识别,并调用该方法以查看是否在序列化中包含该属性。 还有一个替代的{name}Specified模式,它允许您在反序列化时(通过setter)检测事物:
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)] [XmlIgnore] public bool ItemsSpecified { get { return Items != null && Items.Length > 0; } set { } // could set the default array here if we want }Well, you could perhaps add a ShouldSerializeFoo() method:
using System; using System.ComponentModel; using System.Xml.Serialization; [Serializable] public class MyEntity { public string Key { get; set; } public string[] Items { get; set; } [EditorBrowsable(EditorBrowsableState.Never), Browsable(false)] public bool ShouldSerializeItems() { return Items != null && Items.Length > 0; } } static class Program { static void Main() { MyEntity obj = new MyEntity { Key = "abc", Items = new string[0] }; XmlSerializer ser = new XmlSerializer(typeof(MyEntity)); ser.Serialize(Console.Out, obj); } }The ShouldSerialize{name} patten is recognised, and the method is called to see whether to include the property in the serialization. There is also an alternative {name}Specified pattern that allows you to also detect things when deserializing (via the setter):
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)] [XmlIgnore] public bool ItemsSpecified { get { return Items != null && Items.Length > 0; } set { } // could set the default array here if we want }更多推荐
发布评论