我可以在代码中获取DataMember名称吗?

时间:2011-05-13 16:32:02

标签: c# xml datamember

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

[DataMember]
public string Member1;

稍后我查询xml以获取一个值,例如:

XmlNode1.SelectSingleNode("Member1");

是否有可能将上面的Member1变为变量,因此当我将DataMember名称更改为Member2时,查询中的Member1可以更改为{ {1}}自动,而不是手动更改它?

3 个答案:

答案 0 :(得分:1)

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

static class SerializationConstants
{
  public static string MemberTag = "Member1"; //or "Member2"
}

然后在您的数据库中,您可以使用具有Name属性的属性。

[DataMember(Name=SerializationConstants.MemberTag)
public string Member1;

这将控制序列化,以便在您的代码中查询xml,您可以执行以下操作:

XmlNode1.SelectSingleNode(SerializationConstants.MemberTag)

这将是一个黑客,但我想如果我正确理解你的问题应该这样做。

答案 1 :(得分:0)

使用它时,您应该反序列化XML文件,然后您可以使用字段名来访问属性,如果您要进行重构,它们会发生变化。

答案 2 :(得分:0)

这听起来不是一个好主意。

如果您担心使用DataMember属性更改类中的属性名称,您可能需要在该类和XML查询之间使用DTO形式的抽象层。这样,您的XML查询类不关心该成员名称是否发生更改,因为您的DTO永远不会更改。只是从DTO到volitle类的映射。