例如,我想删除或更改下面的属性属性或添加一个新属性.可能吗?
[XmlElement("bill_info")] [XmlIgnore] public BillInfo BillInfo { get { return billInfo; } set { billInfo = value; } }
Marc Gravell.. 14
(编辑 - 我误读了原来的问题)
您无法添加实际属性(它们被刻录到IL中); 但是,XmlSerializer
您不必 - 您可以在构造函数中提供其他属性XmlSerializer
.但是,XmlSerializer
如果你这样做,你需要小心地缓存实例,否则它将为每个实例创建一个额外的程序集,这有点漏洞.(如果你使用只需要a的简单构造函数,它就不会这样做Type
).看看XmlAttributeOverrides
.
举个例子:
using System; using System.Xml.Serialization; public class Person { static void Main() { XmlAttributeOverrides overrides = new XmlAttributeOverrides(); XmlAttributes attribs = new XmlAttributes(); attribs.XmlIgnore = false; attribs.XmlElements.Add(new XmlElementAttribute("personName")); overrides.Add(typeof(Person), "Name", attribs); XmlSerializer ser = new XmlSerializer(typeof(Person), overrides); Person person = new Person(); person.Name = "Marc"; ser.Serialize(Console.Out, person); } private string name; [XmlElement("name")] [XmlIgnore] public string Name { get { return name; } set { name = value; } } }
另请注意; 如果xml属性只是说明性的,那么有第二种方法可以通过使用TypeDescriptor.CreateProperty
和或者为ICustomTypeDescriptor
或者添加与数据绑定相关的事物的属性TypeDescriptionProvider
.比xml情况复杂得多,我担心 - 并不适用于所有代码 - 只是使用组件模型的代码.
(编辑 - 我误读了原来的问题)
您无法添加实际属性(它们被刻录到IL中); 但是,XmlSerializer
您不必 - 您可以在构造函数中提供其他属性XmlSerializer
.但是,XmlSerializer
如果你这样做,你需要小心地缓存实例,否则它将为每个实例创建一个额外的程序集,这有点漏洞.(如果你使用只需要a的简单构造函数,它就不会这样做Type
).看看XmlAttributeOverrides
.
举个例子:
using System; using System.Xml.Serialization; public class Person { static void Main() { XmlAttributeOverrides overrides = new XmlAttributeOverrides(); XmlAttributes attribs = new XmlAttributes(); attribs.XmlIgnore = false; attribs.XmlElements.Add(new XmlElementAttribute("personName")); overrides.Add(typeof(Person), "Name", attribs); XmlSerializer ser = new XmlSerializer(typeof(Person), overrides); Person person = new Person(); person.Name = "Marc"; ser.Serialize(Console.Out, person); } private string name; [XmlElement("name")] [XmlIgnore] public string Name { get { return name; } set { name = value; } } }
另请注意; 如果xml属性只是说明性的,那么有第二种方法可以通过使用TypeDescriptor.CreateProperty
和或者为ICustomTypeDescriptor
或者添加与数据绑定相关的事物的属性TypeDescriptionProvider
.比xml情况复杂得多,我担心 - 并不适用于所有代码 - 只是使用组件模型的代码.