gpt4 book ai didi

c# - 我可以在运行时向对象属性添加属性吗?

转载 作者:可可西里 更新时间:2023-11-01 08:41:08 24 4
gpt4 key购买 nike

例如,我想删除或更改以下属性属性或添加一个新属性。可能吗?

[XmlElement("bill_info")]
[XmlIgnore]
public BillInfo BillInfo
{
get { return billInfo; }
set { billInfo = value; }
}

最佳答案

(编辑 - 我误读了原始问题)

您不能添加实际属性(它们被嵌入到 IL 中);但是,对于 XmlSerializer,您不必这样做 - 您可以在构造函数中为 XmlSerializer 提供额外的属性。但是,如果这样做,您确实需要小心缓存 XmlSerializer 实例,否则它会为每个实例创建一个额外的程序集,这有点泄漏。 (如果您使用仅采用 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 属性只是说明性的,那么还有一种第二种方法来为与数据绑定(bind)相关的事物添加属性,方法是使用 TypeDescriptor.CreatePropertyICustomTypeDescriptor TypeDescriptionProvider。恐怕比 xml 情况复杂得多 - 并且不适用于所有代码 - 仅适用于使用组件模型的代码。

关于c# - 我可以在运行时向对象属性添加属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/602384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com