2014-12-15 2 views
2

Я хочу десериализовать ответ Json в свой объект класса. Я создал службу WCF Restful, а от клиента, использующего прокси-объект, я вызываю метод службы, который возвращает мне json. Теперь я хочу преобразовать этот json в объект класса. Моя служба состоит в следующем:Как отменить ответ Json от службы WCF Restful?

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

Реализации:

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

и от контроллера в MVC Я делаю запрос как:

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(); 
    } 

и когда я бегу я получаю в качестве ответа:

enter image description here

и когда я звоню через метод прокси я получил исключение:

enter image description here

но мои конечные точки есть в конфигурации, как,

enter image description here

+0

Вы не используете прокси-клиент WCF, вместо этого вы делаете, вы делаете запрос HTTP вызов. Почему бы вам не использовать прокси WCF, он должен обрабатывать десериализацию? – 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); 
} 

Примечание: Вы должны использовать 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

Я получаю null во всех свойствах GETProjectResultClass, так как он не десериализуется! @sakir –

+0

сделал u правильно создать GetProjectResultClass? – sakir

+0

Я фактически использую объект класса DataContract на клиенте. @sakir Я не создаю один и тот же класс в модели, используя класс datacontract службы. –

Смежные вопросы