2010-07-29 22 views
0

我在搶API提供的我的一個項目JSON,這意味着使用一個類deserialising JSON和我選擇去與DataContract類。無論如何,不​​同的URL對應於API的不同JSON輸出。與相關聯的類的變量在C#(用於JSON)

那我問?這是看是否有什麼更好的辦法,以具有對應於DataContract類不必創建public T GetObject<T>(string uri),並使用它與GetObject<ExampleDataContract>("http://blah/")的URL。

下面的代碼顯示了我當前的嘗試,我在想是不是一個很好的主意可言,更何況事實,如果我曾經更改命名空間,我在一些樂趣。

public T GetObject<T>() 
    { 
     string uri = ""; 
     string type = typeof(T).ToString(); 
     switch (type) 
     { 
      case "Namespace.ExampleDataContract": 
       uri = "http://www.example.com/blah.json"; 
       break; 
     } 

     return JsonHelper.Deserialize<T>(this.GetJson(uri)); 
    } 

回答

1

還有一個問題,我用你的方法,請參閱:如果你有什麼兩個不同的網址,都返回一個ExampleDataContract?使用你的方法,你只能夠獲取其中的一個,因爲該類型唯一確定了URL。

在任何情況下,你是正確的,擺脫了神奇的字符串"Namespace.ExampleDataContract"的是一個好主意。使用if是一種選擇,在SO問題708911298976中顯示了更多。

public T GetObject<T>() 
{ 
    string uri = ""; 
    if (typeof(T) == typeof(Namespace.ExampleDataContract)) 
    { 
     uri = "http://www.example.com/blah.json"; 
    } 
    else if (typeof(T) == ...) 
    { 
     ... 
    } 
    else 
    { 
     ... // throw some exception 
    } 

    return JsonHelper.Deserialize<T>(this.GetJson(uri)); 
} 
+0

我在問,如果序列/ etc有更好的方法,那麼我認爲這是最好的方法嗎? – unrelativity 2010-07-29 10:18:29

+0

@ A2H:好吧,如果你希望自己的網址按類型來決定,你需要一個列表的Type1 - >網址1,2型 - > URL2,... * *某處。無論你把它放在一個巨大的'if'序列中,在一個靜態的'Dictionary '或某個配置文件中,基本上都是一個味道和你確切需求的問題。 – Heinzi 2010-07-29 10:41:08