我在ASP.Net MVC3中託管了一個Web服務,它返回一個Json字符串。從c#控制檯應用程序調用webservice並將返回值解析爲.NET對象的最佳方法是什麼?從.NET控制檯調用JSON WebService的最佳方式
我應該在我的控制檯應用中引用MVC3嗎?
Json.Net有一些很好的序列化和反序列化.NET對象的方法,但我沒有看到它有從Web服務中獲取和發佈數據的方法。
或者我應該只是創建自己的幫助方法開機自檢和獲取Web服務?我如何將我的.net對象序列化爲鍵值對?
我在ASP.Net MVC3中託管了一個Web服務,它返回一個Json字符串。從c#控制檯應用程序調用webservice並將返回值解析爲.NET對象的最佳方法是什麼?從.NET控制檯調用JSON WebService的最佳方式
我應該在我的控制檯應用中引用MVC3嗎?
Json.Net有一些很好的序列化和反序列化.NET對象的方法,但我沒有看到它有從Web服務中獲取和發佈數據的方法。
或者我應該只是創建自己的幫助方法開機自檢和獲取Web服務?我如何將我的.net對象序列化爲鍵值對?
我使用HttpWebRequest從Web服務進行GET,這會返回一個JSON字符串。它看起來像這樣一個GET:
// Returns JSON string
string GET(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try {
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream()) {
StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
return reader.ReadToEnd();
}
}
catch (WebException ex) {
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.GetEncoding("utf-8"));
String errorText = reader.ReadToEnd();
// log errorText
}
throw;
}
}
然後我使用JSON.Net來動態地解析字符串。 或者,您可以靜態地從樣品JSON輸出使用這個CodePlex上工具生成C#類:http://jsonclassgenerator.codeplex.com/
POST看起來是這樣的:
// POST a JSON string
void POST(string url, string jsonContent)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(jsonContent);
request.ContentLength = byteArray.Length;
request.ContentType = @"application/json";
using (Stream dataStream = request.GetRequestStream()) {
dataStream.Write(byteArray, 0, byteArray.Length);
}
long length = 0;
try {
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
length = response.ContentLength;
}
}
catch (WebException ex) {
// Log exception and throw as for GET example above
}
}
我用這樣的代碼在我們的Web服務的自動化測試。
WebClient從遠程url獲取內容,JavaScriptSerializer或Json.NET將JSON反序列化爲.NET對象。例如,你定義一個模型類,這將反映JSON結構,然後:
using (var client = new WebClient())
{
var json = client.DownloadString("http://example.com/json");
var serializer = new JavaScriptSerializer();
SomeModel model = serializer.Deserialize<SomeModel>(json);
// TODO: do something with the model
}
也有可能籤如RestSharp一些REST客戶端框架。
@BrokeMyLegBiking,哪一個?它與ASPAjax無關。如果您正在討論JavaScriptSerializer類,它將在System.Web.Extensions程序集的.NET中構建,因此您不必下載或安裝任何東西。 –
有沒有辦法將c#對象的所有屬性名/屬性值轉換爲POST鍵值對(或GET鍵值對)?這樣我可以有效地使用c#對象作爲我的webservice方法的輸入值? – BrokeMyLegBiking
@BrokeMyLegBiking,這取決於您擁有什麼對象以及Web服務如何預期輸入。 –
是的,POST示例會很有幫助。 – BrokeMyLegBiking
好的,我添加了POST示例 – GarethOwen
JsonClassGenerator非常棒。反序列化很容易,因爲您只需通過傳遞json字符串來構造強類型對象。 – AaronLS