C# · 12月 31, 2021

c# – 如何抑制列表属性的XML标签

序列化时是否可以避免列表属性标签? //[Serializable()] – removed,unnecessarypublic class Foo{ protected List<FooBar> fooBars = new List<FooBar>(); public virtual List<FooBar> FooBars { get { return fooBars; } set { fooBars = value; } }}// [Serializable()] – removed,unnecessarypublic class FooBar{ public int MyProperty { get; set; }}

序列化Foo给出(注释除外):

<Foo xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema”> <FooBars> <!– Unwanted tag –> <FooBar> <MyProperty>7</MyProperty> </FooBar> <FooBar> <MyProperty>9</MyProperty> </FooBar> </FooBars></Foo>

想输出:

<Foo xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema”> <FooBar> <MyProperty>7</MyProperty> </FooBar> <FooBar> <MyProperty>9</MyProperty> </FooBar>解决方法 添加: [System.Xml.Serialization.XmlElement(“FooBar”)]public virtual List<FooBar> FooBars { get { return fooBars; } set { fooBars = value; }}

结果是

<FooMain xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema”> <FooBar> <MyProperty>7</MyProperty> </FooBar> <FooBar> <MyProperty>76</MyProperty> </FooBar> <FooBar> <MyProperty>67</MyProperty> </FooBar></FooMain>