2015-12-07 69 views
1

我有這兩個班在我的RESTful Web服務和我的web應用程序轉換JSON響應返回從Resful Web服務

public class Service 
{ 
    public int ID { get; set; } 
    public int HCode { get; set; } 
    public int HUserID { get; set; } 
    public string PatientNID { get; set; } 
    public List<Document> DocumentList { get; set; } 
    public int ServiceTypeID { get; set; } 
    public string TestName { get; set; } 
    public string Comment { get; set; } 
    public DateTime Date { get; set; } 
} 

public class Document 
{ 
    public int ID { get; set; } 
    public int ServiceID { get; set; } 
    public string FileName { get; set; } 
    public string Extension { get; set; } 
    public byte[] ByteDocument { get; set; } 
} 

這是溫控功能recieving對象和Web服務發回目錄

public List<Serivce> GetServiceByHUserID(Service service) 
    { 
     SqlCommand cmd = new SqlCommand(
       "SELECT *" 
      + " FROM TransactionHistory" 
      + " WHERE UserID = @HUserUserIDParam" 
      , con); 
     cmd.Parameters.Add(
     "@HUserUserIDParam", SqlDbType.NVarChar).Value = service.HUserID; 

     return GetServiceResponse(cmd); 
    } 

private List<Service> GetServiceResponse(SqlCommand cmd) 
    { 
      List<Service> serviceList = new List<Service>(); 
     try 
     { 
      // Filling Data 
       .... 
     } 
      return serviceList; 
     } 
     catch (Exception e) { return null; } 
     finally { con.Close(); } 
    } 

這是在溫控功能發送的對象,並在Web應用程序列表recieving

private List<Service> GetServiceListResponse(HttpWebRequest request 
     , Service service) 
    { 
     try 
     { 
      var json = new JavaScriptSerializer().Serialize(service); 
      request.Method = "POST"; 
      request.ContentType = "application/json"; 
      request.ContentLength = json.Length; 
      StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), 
       System.Text.Encoding.ASCII); 
      requestWriter.Write(json); 
      requestWriter.Close(); 

      WebResponse webResponse = request.GetResponse(); 
      Stream webStream = webResponse.GetResponseStream(); 
      StreamReader responseReader = new StreamReader(webStream); 
      string response = responseReader.ReadToEnd(); 
      JavaScriptSerializer serializer = new JavaScriptSerializer(); 
      // ERROR HERE 
      dynamic item = serializer.Deserialize<List<Service>>(response); 
      // ERROR HERE 
      responseReader.Close(); 
      return item; 
     } 
     catch (Exception e) { return null; } 
    } 

當我試圖返回列表<。服務>作爲一個JSON對象和反序列化它,我得到這個錯誤

這裏的例外

無法轉換的類型「System.String」的對象鍵入「System.Byte []」

+0

是否有某些原因,您不能使用自動爲您處理所有這些.NET HttpClient庫? –

+0

它是我第一次創建一個Web服務,所以我不知道所有的方法。我可能會搜索並嘗試一下。謝謝您的回覆。 @ErikFunkenbusch – Ghanem

回答

0

我發現了一個SOLUTION

其只是改變,我用在序列化和反序列化類(建於類在.NET呼叫ED JavaScriptSerializer

JavaScriptSerializer()來JsonConvert

在Github上發佈:https://github.com/JamesNK/Newtonsoft.Json/releases

最新包裝上NuGut:安裝,包裝Newtonsoft.Json

Newtonsoft網站:http://www.newtonsoft.com/json

引用的DLL或下載包後,參考裏面的代碼的DLL(所述的.cs類中):

using Newtonsoft.Json; 

其它參考文獻:

using System.IO; 
using System.Text; 

發送前序列化JSON對象和使用UTF8編碼

string json = JsonConvert.SerializeObject(service); 
request.Method = "POST"; 
request.Method = "POSt"; 
request.ContentType = "application/json"; 
request.ContentLength = Encoding.UTF8.GetByteCount(json); 
StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), new UTF8Encoding(false)); 
requestWriter.Write(json); 
requestWriter.Close(); 

反序列化的JS在獲得響應後的對象上:

List<Service> serviceList = JsonConvert.DeserializeObject<List<Service>>(response);