2014-12-15 3 views
2

내 클래스 개체에 대한 Json 응답을 deserialize하고 싶습니다. WCF Restful Service를 만들었고 프록시 객체를 사용하는 클라이언트에서 json을 반환하는 서비스 메서드를 호출하고 있습니다. 이제 json을 클래스 객체로 변환하려고합니다.WCF Restful Service에서 Json 응답을 비 직렬화하는 방법은 무엇입니까?

[OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "GetProject/{projectID}")] 
    tblProject GetProject(String projectID); 

구현 : 내 서비스는 다음과 같다

public ActionResult Index() 
     { 
      var request = (HttpWebRequest)WebRequest.Create("http://localhost:8733/Design_Time_Addresses/RestServiceLibrary.RESTService/REST_ProjectService/getproject/2"); 
      HttpWebResponse response = request.GetResponse() as HttpWebResponse; 
      Stream stream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(stream); 
       string txtResult = reader.ReadToEnd(); 
return view(); 
    } 

내가 실행할 때 내가 받고 있어요 :

public tblProject GetProject(String projectID) 
     { 
      tblProject pro = new tblProject(); 
      pro = DAL.ProjectDAL.GetProject(Convert.ToInt32(projectID)); 
      return pro; 
     } 

와 나는 같은 요청을 만들고있어 MVC에서 컨트롤러에서

답변 :

enter image description here

나는 예외있어 I 프록시 방법으로 호출 할 때 :

enter image description here

을하지만 내 엔드 포인트 등의 설정에있다,

enter image description here

+0

를 사용합니다. WCF 프록시를 사용하면 왜 deserialization을 처리해야합니까? – Enes

+0

@Enes 제 질문을 업데이트했습니다. –

+0

@Nikolai Samteladze –

답변

1

당신이 javascriptserializer

을 사용할 수 있습니다
string s = "YouJsonText"; 
var serializer = new JavaScriptSerializer(); 
var result = serializer.Deserialize(s); 
//or 
YouCustomClass res = serializer.Deserialize<YouCustomClass>(sb.ToString()); 

또한,이 같은 CustomJsonConverter 사용할 수 있습니다

public class YouCustomClassConverter : JavaScriptConverter 
{ 
    public override object Deserialize(IDictionary<string, object> dictionary, Type type,      JavaScriptSerializer serializer) 
    { 
     throw new NotImplementedException(); 
    } 

    public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer) 
    { 
     throw new NotImplementedException(); 
    } 

    //and first you need register type, which you want Deserialize 
    public override IEnumerable<Type> SupportedTypes 
    { 
     get { return new[] { typeof(YouCustomClass) }; } 
    } 

} 

//and then example of using JavaScriptSerializer with custom converter 
var ser = new JavaScriptSerializer(); 
ser.RegisterConverters(new JavaScriptConverter[] { new YouCustomClassConverter() }); 
try 
{ 
    YouCustomClass obj = ser.Deserialize(jsonString); 
} 

참고 : 대신 당신이 HTTP 요청 전화를하고있다 만들고있다, 당신은 WCF 프록시 클라이언트를 사용하지 않는 using System.Web.Script.Serialization;

1
class GetProjectResultWrapper 
    { 
     public GetProjectResult GetProjectResult{ get; set; } 
    } 
    class GetProjectResult 
    { 
     public string id {get;set;} 
     ..... 
     ...... 
    } 
JavaScriptSerializer ser = new JavaScriptSerializer(); 
    GetProjectResultWrapper response = ser.Deserialize<GetProjectResultWrapper>(sb.ToString()); 
response .GetProjectResult; 
+0

GETProjectResultClass의 모든 속성에서 null이 발생합니다. 역 직렬화가 아닙니다. @ sakir –

+0

당신은 properl GetProjectResultClass를 만들었나요? – sakir

+0

저는 실제로 클라이언트에서 DataContract 클래스 객체를 사용하고 있습니다. @sakir 클래스 datacontract를 사용하여 동일한 클래스를 모델로 작성하지 않습니다. –

관련 문제