是否可以更改/覆盖类型的Name属性?
鉴于课程定义:
class Sample
{}
您可以更改typeof(Sample).Name
返回的值吗?
我正在使用自定义序列化库,它在源代码中使用typeof(T).Name
:
writer.WriteStartElement(typeof(T).Name);
writer.WriteValue(item);
writer.WriteEndElement();
答案 0 :(得分:3)
不,您无法在运行时更改.Name
的{{1}}。但是,大多数序列化库允许您通过提供自定义" binder"来控制名称的处理。 (等),或者通过使用属性注释类型来指示要使用的首选名称(注意:大多数允许属性的库也允许通过序列化库的运行时配置提供名称)。 / p>
一个重要的问题是:这里使用的序列化库是什么?
如果序列化库不支持此功能,并且无法更改,那么所有这一切的唯一替代方法(不能重命名Type
)就是创建一个类型(手动或通过运行时Sample
看起来像原始类型,但使用不同的代码,类似地:创建在两种类型之间进行转换的代码。
答案 1 :(得分:1)
我不知道如何完成这项任务。 CLR与ref对象编组类似,但我怀疑它会让你重命名"你的班级或其财产(领域)就是这样。
您最好的选择是要么符合旧代码,要么(更好的代码)是替换或更改序列化例程,使其不那么严格。
答案 2 :(得分:0)
对于使用BCL中的XmlSerialization
库的XML序列化,您可以使用以下属性覆盖要生成的xml元素名称:
[XmlElement("SomeOtherName")]
public class Sample{...}
答案 3 :(得分:0)
根据您的问题,您提到要在序列化期间控制名称
如果要在序列化期间更改名称,可以使用以下属性
[DataContract(Name = "NewName")]
[XmlRoot("NewName")]
class Sample
{
}