2011-05-13 45 views
0

,我使用的数据成员序列化类到一个XML文件一样,我可以在代码中获取DataMember名称吗?在一个项目中

[DataMember] 
public string Member1; 

后,我查询XML得到一个值出来,如:

XmlNode1.SelectSingleNode("Member1"); 

是否有可能使上述Member1给一个变量,所以当我改变DataMember名称是Member2在查询中Member1可以自动更改为Member2,而不是我手动改变呢?

回答

1

我不完全相信我明白你希望实现什么,但是我想如果你想能够集中控制序列化的输出,你可以定义一个公共静态类的标签。

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

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

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

这将控制序列化,使得您的查询的XML代码,你可以这样做:

XmlNode1.SelectSingleNode(SerializationConstants.MemberTag) 

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

+0

它看起来这可以工作时,我使MemberTag常量。如果没有其他简单的方法,我会以此作为答案... – 2011-05-13 18:41:51

0

与它一起工作时,你应该反序列化的XML文件,那么你可以使用字段名称来访问的属性,如果你会做重构他们会改变。

+0

感谢您的建议。反序列化可以做到这一点,只是在我的情况,我只需要一个值,但desrializtion将反序列化全班。这太小了,以获得小的价值? – 2011-05-13 16:47:55

0

这并不听起来像一个伟大的想法。

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

+0

DTO是数据传输对象?我阅读http://msdn.microsoft.com/en-us/library/ms978717.aspx ...似乎很复杂,涉及我的问题... – 2011-05-13 18:35:03

+0

它可以让你保持一个永远不会改变的类。如果具有datamember属性的类更改很多,则需要更改的类是来自所需数据的类与始终具有所需数据的DTO对象的映射。这样,不需要在映射之外进行代码更改。 – 2011-05-13 19:56:55

相关问题