2013-05-30 48 views
1

如何反序列化我在asp.net webservice中作爲json對象發送的字符串。如何反序列化我發送給我的web服務的數據?

HttpClient client = new DefaultHttpClient(); 

HttpPost post = new HttpPost("http://server/NCO/webservice.asmx/GetNRIC"); 

post.setHeader("Content-type", "application/json"); 

post.setHeader("Accept", "application/json"); 

JSONObject obj = new JSONObject(); 

obj.put("ic", "s1111111b"); 

post.setEntity(new StringEntity(obj.toString(), "UTF-8")); 

HttpResponse response = client.execute(post); 

回答

1

您將需要一個實用程序類,其中包括類似下面的方法。

public static T JsonDeserialize<T> (string jsonString) 
{ 
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); 
    MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); 
    T obj = (T)ser.ReadObject(ms); 
    return obj; 
} 

查看this link瞭解更多詳情。無論如何,如果您在兩邊都使用數據傳輸對象(DTO),您會發現這種序列化和反序列化方案更容易。然後,您不必從Android端手動安排JSON字符串。爲此,您可能還需要Android端的JacksonMapper將DTO直接轉換爲字符串。 從ASP.NET方面甚至你可以有相同的實體類,因此反序列化變得更容易

RequestDTO requestDTO = JsonHelper.JsonDeserialize<RequestDTO>(jsonString); 
+0

對不起,但我知道什麼T和MS是什麼?是不是像字符串或對象?當一個變量我返回obj,它是作爲一個字符串返回它還是必須將它從一個對象轉換爲一個字符串? –

+0

其實它是你可能需要的DTO對象。假設您想要檢索學生對象。你需要創建一個包含你想要的字段的Student.class,並且T應該是Student。因此,您將得到您從客戶端傳回的學生對象。 MemoryStream用於指定您的編碼類型。在你的場景中,它是UTF-8。 – MCF

+0

是否有任何我需要導入的東西?它表示無法找到datacontractjsonserialiser和encoding的類型或名稱空間。 –

相關問題