2014-04-21 3 views
0

나는 Json 응답으로 작업하기 위해 사용하는 방법이있다. 이것이 하네스의 일부이기 때문에 다수의 서로 다른 데이터 객체를 만들려고합니다. 이렇게하면 더 일반적으로 만들 수 있기 때문에 제가 만드는 각각의 다른 데이터 객체에 대해 동일한 코드를 만들 필요가 없습니다.직렬화 방법을 더 모듈화 할 수있는 방법이 있습니까?

[DataContract] 
class Stats 
{ 
    [DataMember] 
    public string StatusCode {get;set;} 
    [DataMember] 
    public int ProspectCount {get;set;} 
    [DataMember] 
    public int MessageCount {get;set;} 
    [DataMember] 
    public int NewListingCount {get;set;} 
    [DataMember] 
    public int ReminderCount {get;set;} 
    [DataMember] 
    public int MyListingCount {get;set;} 
    [DataMember] 
    public int OfficListingCount {get;set;} 

} 


public static Stats SendRequest(string requestUrl) 
{ 
    try 
    { 
     HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest; 
     using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
     { 
      if (response.StatusCode != HttpStatusCode.OK) 
       throw new Exception(String.Format(
       "Server error (HTTP {0}: {1}).", 
       response.StatusCode, 
       response.StatusDescription)); 
      DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Stats)); 
      object objResponse = jsonSerializer.ReadObject(response.GetResponseStream()); 
      Stats jsonResponse 
      = objResponse as Stats; 
      return jsonResponse; 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.Message); 
     return null; 
    } 
} 

기본적으로 SendRequest 메서드를 다시 만들지 않고도 두 번째 및 세 번째 데이터 계약을 만들 수 있기를 원합니다.

답변

0

내가 직렬화 부분에 대한 Json.NET을 활용 끝났다. 이것은 내가 필요한 모든 것을 할 것입니다.

public static string ProcessRequest(string requestUrl) 
    { 
     try 
     { 
      HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest; 

      using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
      { 
       string responseContents; 
       if (response.StatusCode != HttpStatusCode.OK) 
        throw new Exception(String.Format(
        "Server error (HTTP {0}: {1}).", 
        response.StatusCode, 
        response.StatusDescription)); 

       Stream responseStream = response.GetResponseStream(); 
       using(StreamReader readStream = new StreamReader(responseStream)) 
       { 
        responseContents = readStream.ReadToEnd(); 
       } 

       return responseContents; 
      } 


     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
      return null; 
     } 
    } 

그리고 다른 방법으로 직렬화 구성 요소 심지어는 고려했으나, 문자열 :

Stats results = JsonConvert.DeserializeObject<Stats>(response); 
0

두 가지 옵션 :

1 :있는 sendRequest 방법 다른 클래스의 정적 방법을 확인하고 다음과 같이 호출해야하는 모든 개체가 :

RequestSender.SendRequest(requestUrl). 

2 : 이것과 다른 확인 작성해야하는 클래스는 상속을 통해 동일한 메소드에 액세스 할 수 있도록 SendRequest (String requestUrl) 메소드가 포함 된 수퍼 클래스를 확장합니다.

0

일반적인 방법이 효과가 있습니까? 서명은 다음과 같습니다

public static T SendRequest<T>(string requestUrl) where T : class 

를 메소드 본문에서 당신은 TStats을 대체 할 것이다.

사용법 :

Stats response = RequestSender.SendRequest<Stats>("some URL"); 
OtherClass anotherResponse = RequestSender.SendRequest<OtherClass>("some other URL"); 
+0

로 응답 걸리는 간단한 라이너 :처럼 이제 내 방법이 보인다. 나는 그것을 내일 볼 것이다. –