2011-05-13 31 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

相關問題