2015-09-27 77 views
0

我創建了Visual Studio 2010的一個休息Web服務這樣的:C#創建其他web服務

[ServiceContract] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
public class DocService 
{ 
    [WebInvoke(ResponseFormat = WebMessageFormat.Json,UriTemplate = "", BodyStyle = WebMessageBodyStyle.Wrapped)] 
    public data GetCollection(Stream streamdata) 
    { 
    } 
} 

用戶將發送JSON數據請求到該服務:

var JSONObject = '{"pCode": "123456789","mCode": "001","tCode": "","dArr": [{ "dCode": 26 },{ "dCode": 27 }],"sId": "sk"}'; 
var jsonData = JSON.parse(JSONObject); 
var request = $.ajax({ 
    url: "http://myIp/path/to/service", 
    type: "POST", 
    data: jsonData, 
    dataType: "json", 
    success: function (data) { 
     alert(data); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert(xhr.status); 
     alert(thrownError); 
    } 
}); 

第一個問題:如何我可以在我的代碼中訪問該json嗎? 現在我做這樣的(但JSON數組不能序列正確):

StreamReader reader = new StreamReader(streamdata); 
string res = reader.ReadToEnd(); 
reader.Close(); 
reader.Dispose(); 

string resDecode = HttpUtility.UrlDecode(res); 
NameValueCollection nvc = HttpUtility.ParseQueryString(resDecode); 

var json = new JavaScriptSerializer().Serialize(
    nvc.AllKeys.ToDictionary(k => k, k => nvc[k]) 
); 

輸出:

res = "pCode=123456789&mCode=001&tCode=&dArr%5B0%5D%5BdCode%5D=26&dArr%5B1%5D%5BdCode%5D=27&sId=sk" 
resDecode= "pCode=123456789&mCode=001&tCode=&dArr[0][dCode]=26&dArr[1][dCode]=27&sId=sk" 
nvc = {pCode=123456789&mCode=001&tCode=&dArr%5b0%5d%5bdCode%5d=26&dArr%5b1%5d%5bdCode%5d=27&sId=sk} 
json = "{\"pCode\":\"123456789\",\"mCode\":\"001\",\"tCode\":\"\",\"dArr[0][dCode]\":\"26\",\"dArr[1][dCode]\":\"27\",\"sId\":\"sk\"}" 

問題二:在阿賈克斯,請求發出後,它總是與完成錯誤和xhr.statusthrownError是0和空但小提琴手我可以看到JSON輸出

+1

PAS這裏是'xhr.status'和'thrownError'錯誤。 –

+0

第二個問題聽起來像是一個跨域問題。使用[jsnop](http://stackoverflow.com/questions/3506208/jquery-ajax-cross-domain)或[Access-Control-Allow-Origin HTTP標頭](http://stackoverflow.com/questions/6516591/how-to-implement -access-control-allow-origin-header-in-asp-net) –

+0

@SandeepKushwah沒有錯誤。 Json格式不正確。 而對於第二個問題「xhr.status = 0」 –

回答

1

答疫情週報第一個問題:在C#中使用JSON

最好的辦法是創建一個類與JSON對象的確切名稱和類型的屬性,然後反序列化JSON是這樣的:

RequestClass reqParam = new RequestClass(); //Class with properties same as json object 

StreamReader reader = new StreamReader(streamdata); 
string res = reader.ReadToEnd(); 
reader.Close(); 
reader.Dispose(); 

JavaScriptSerializer js = new JavaScriptSerializer(); 
reqParam = js.Deserialize<RequestClass>(res); 

回答第二個問題:

我最後的JavaScript是這樣的,細的工作:

var JSONObject = '{"pCode": "123456789","mCode": "001","tCode": "","dArr": [{ "dCode": 26 },{ "dCode": 27 }],"sId": "sk"}'; 
//Delete parse line 
var request = $.ajax({ 
    url: "http://myIp/path/to/service", 
    type: "POST", 
    contentType: "application/json", //Added 
    data: JSONObject, // This line changed 
    dataType: "json", 
    success: function (data) { 
     alert(data); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert(xhr.status); 
     alert(thrownError); 
    } 
});