2010-08-02 2 views
11

의 JSON 객체를 역 직렬화 할 수 있다는 것을 알고 있습니다. WebClient.DownloadString()을 사용하지만 그 반대의 경우는 어떨까요? MSDN 페이지를 살펴본 결과 JSON 개체로 직렬화 할 수 있는지 여부를 알 수 없습니다.WebClient를 JSON 직렬화에 사용 하시겠습니까?

+0

는 당신이 웹 클라이언트 클래스와 무엇을하려고 보여주는 일부 샘플 의사 코드를 제공 할 수 있습니까? –

+0

JSON을 serialize하여 소비를 위해 HttpRequest를 통해 보낼 수 있도록 .ascx 또는 심지어 .NET 외부에서도 말하십시오. 모든 것이 가능한지 알고 싶을뿐입니다. 나는 방법을 보지 못한다. – PositiveGuy

+0

내 답변이 업데이트되었습니다. 도움이 되었기를 바랍니다. –

답변

30

WebClient 인스턴스를 사용하기 전에 객체를 JSON으로 직렬화하면됩니다. 이 여기

var url = "..."; 
var json = JsonHelper.ToJson(myObject); 

var response = PostJson(url, json); 

을하는 데 도움이 웹 클라이언트 클래스에서 JSON 데이터를 전송하는 예입니다 희망 : 여기

public static string PostJson(string url, string data) 
{ 
    var bytes = Encoding.Default.GetBytes(data); 

    using (var client = new WebClient()) 
    { 
     client.Headers.Add("Content-Type", "application/json"); 
     var response = client.UploadData(url, "POST", bytes); 

     return Encoding.Default.GetString(response); 
    } 
} 

가와 JSON에서/역 직렬화 객체를 직렬화 할 DataContractJsonSerializer 클래스를 사용하는 간단한 도우미 클래스입니다.

public static class JsonHelper 
{ 
    public static string ToJson<T>(T instance) 
    { 
     var serializer = new DataContractJsonSerializer(typeof(T)); 
     using (var tempStream = new MemoryStream()) 
     { 
      serializer.WriteObject(tempStream, instance); 
      return Encoding.Default.GetString(tempStream.ToArray()); 
     } 
    } 

    public static T FromJson<T>(string json) 
    { 
     var serializer = new DataContractJsonSerializer(typeof(T)); 
     using (var tempStream = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
     { 
      return (T)serializer.ReadObject(tempStream); 
     } 
    } 
} 
+0

네,하지만 여기 WebClient 개체에 대해 묻고 있습니다. 가능하다면 알아 내려고했지만, 직렬화 할 수있는 객체에 대해 이야기하는 것을 보지 못했습니다 ... 단지 비 직렬화합니다. – PositiveGuy

+0

+1 .. 고마워. 네 Ans 나를 도왔 ... – RajeshKdev

4

내가 사용

var json = new JavaScriptSerializer().Serialize(yourObject); 
+0

downvote에 정교하게 좋을까요 – Guillaume86

관련 문제