2010-07-29 3 views
0

내 프로젝트에 API 제공 JSON을 가져 가야한다는 것은 클래스를 사용하여 JSON을 비 직렬화한다는 것을 의미하며 클래스를 DataContract 개로 선택했습니다. . 어쨌든 다른 URL은 API의 다른 JSON 출력과 일치합니다.C# (JSON 용)에서 클래스와 변수 연결하기

그래서 무엇을 묻는거야? public T GetObject<T>(string uri)을 만들고 GetObject<ExampleDataContract>("http://blah/")과 함께 사용하는 것보다 DataContract 클래스에 해당하는 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

나는 당신의 접근 방식으로 볼 문제가 하나있다 : 당신이 두 개의 서로 다른 URL이 무엇을 가지고 있다면, 모두가 ExampleDataContract를 반환? 당신의 메소드를 사용하면, 그 타입이 URL을 유일하게 결정하기 때문에 그 중 하나만 가져올 수 있습니다.

어쨌든 마법의 문자열 "Namespace.ExampleDataContract"을 제거하는 것이 좋습니다. if을 사용하면 더 많은 질문이 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

거대한 if sequence/etc보다 나은 방법이 있는지 묻고 싶습니다. 그래서 이것이 가장 좋은 방법이라고 생각하십니까? – unrelativity

+0

@ a2h : 글쎄, 유형별로 URL을 결정하려면 Type1 -> Url1, Type2 -> Url2, ... * somewhere * 목록이 필요합니다. 거대한'if '시퀀스, 정적'Dictionary '또는 일부 설정 파일에 넣을 지 여부는 근본적으로 맛과 정확한 요구 사항에 대한 질문입니다. – Heinzi