2010-05-20 75 views
0

例如,我的輸入XML看起來像這樣。將字面值映射到對象屬性/值

<root> 
<myelemt> 
<input type="variable"> 
<variable>STARTDATE</variable> 
<variable>CUSTOMERNAME</variable> 
</input> 
</myelemt> 
</root> 

它進行反序列化並加載到該對象在我的代碼MyXmlElemtObj

我寫這樣,

if(MyXmlElemtObj.input.variable.ToUpper() == "STARTDATE") 
    ProcessObjectB(ObjectA.OrderDate); 

if(MyXmlElemtObj.input.variable.ToUpper() == "CUSTOMERNAME") 
    ProcessObjectB(ObjectC.UserName); 

在這裏,我映射這些輸入文字到某些對象的值。

讓我感到害怕的是在我的代碼中看到一些**硬編碼文字**。

相反,我想寫點東西像ProcessObjectB(Common.GetMappedvalue(MyXmlElemtObj.input.variable));

有沒有辦法來這個映射件事隔離到普通班,在那裏我會預先定義其字面映射 哪個值。問題是這些值是運行時創建的對象的值。

如果我的問題是有道理的那麼那麼我該如何實現呢?

我想我已經給出了所有必要的細節。如果有什麼遺漏,請metnion。 Thx很多。

回答

0

這個問題有點令人困惑,但從我收集的內容來看,您只是尋找一箇中間類來執行輸入變量到字符串的映射。你提到你不想要硬編碼的字符串,這裏合乎邏輯的補救措施是爲它們聲明一系列常量(也許在中間映射類的頂部?)。

public class Common 
{ 
    public const string STARTDATE = "STARTDATE"; 
    public const string CUSTOMERNAME = "CUSTOMERNAME"; 

    public static string GetMappedValue(string inputVariable) 
    { 
     string mappedTo = null; 

     switch(inputVariable) 
     { 
      case "abc": 
       mappedTo = SOME_OTHER_CONSTANT_HERE; //map it 
       break; 
      case "xyz": 
       mappedTo = FOO; 
       break; 
      //etc etc... 
     } 

     return mappedTo; 
    } 
相關問題