C# 我可以在代码中获取数据成员名称吗?

C# 我可以在代码中获取数据成员名称吗?,c#,xml,datamember,C#,Xml,Datamember,在一个项目中,我使用datamember将类序列化为xml文件,如 [DataMember] public string Member1; 稍后我查询xml以获取一个值,如: XmlNode1.SelectSingleNode("Member1"); 是否可以将上面的Member1设置为变量,这样当我将DataMember名称更改为Member2时,查询中的Member1可以自动更改为Member2,而不是我手动更改它?您应该在使用XML文件时反序列化它,然后,您可以使用字段名访问属性,如果

在一个项目中,我使用datamember将类序列化为xml文件,如

[DataMember]
public string Member1;
稍后我查询xml以获取一个值,如:

XmlNode1.SelectSingleNode("Member1");

是否可以将上面的
Member1
设置为变量,这样当我将
DataMember
名称更改为
Member2
时,查询中的
Member1
可以自动更改为
Member2
,而不是我手动更改它?

您应该在使用XML文件时反序列化它,然后,您可以使用字段名访问属性,如果进行重构,这些属性将发生更改。

这听起来不是一个好主意


如果您担心类中的属性名称随着DataMember属性的变化而变化,那么您可能需要在该类和XML查询之间建立一个DTO形式的抽象层。这样,您的XML查询类就不在乎该成员名称是否更改,因为您的DTO永远不会更改。仅仅是从DTO到volitle类的映射。

我不确定我是否理解您希望实现的目标,但我想如果您希望能够集中控制序列化的输出,可以在公共静态类中定义标记

static class SerializationConstants
{
  public static string MemberTag = "Member1"; //or "Member2"
}
然后,在datamember中,可以使用带有Name属性的属性

[DataMember(Name=SerializationConstants.MemberTag)
public string Member1;
这将控制序列化,以便在查询xml的代码中执行以下操作:

XmlNode1.SelectSingleNode(SerializationConstants.MemberTag)

这将是一个骇客,但如果我正确理解了你的问题,我想应该可以。

谢谢你的建议。反序列化可以做到这一点,就我的情况而言,我只需要一个值,但反序列化将反序列化整个类。这是否太多而无法获得较小的值?DTO是数据传输对象?我读到。。。与我的问题相关似乎相当复杂…它允许您维护一个永不更改的类。如果具有datamember属性的类发生了很多变化,那么您所要做的就是更改所需数据的类与始终具有所需数据的DTO对象之间的映射。这样,就不需要在映射之外进行任何代码更改。如果没有其他简单的方法,我将以此作为答案。。。