Я создал веб-сервис на С#, который выглядит так:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string UpdateHeatCallJSON(string json)
{
HeatItem item = JsonConvert.DeserializeObject<HeatItem>(json);
UpdateHeatCall(item);
HeatItemResponse response = new HeatItemResponse();
//... more code
return JsonConvert.SerializeObject(response);
}
У меня есть объект HeatItem, который я хочу передать в качестве аргумента.
В настоящее время я использую веб-службу (для тестирования) в консольном приложении С# и испытываю проблемы с поиском правильного формата. Это мой звонок:
static void UpdateHeatItemJSON()
{
// corrected to WebRequest from HttpWebRequest
WebRequest request = WebRequest.Create(requestServer + "/UpdateHeatCallJSON");
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
string postData = "";
postData = @"{'json':'{""BusinessPartner"":""00000000-0000-0000-0000-000000000000"",""CaseNumber"":4,""CaseDescription"":""first case"",""CaseType"":"""",""CaseSeverity"":"""",""DueDate"":""0001-01-01T00:00:00"",""AssignmentNumber"":5,""AssignmentDescription"":"""",""AssignmentCreation"":""0001-01-01T00:00:00"",""AssignmentTime"":""0001-01-01T00:00:00"",""ChangeDate"":""0001-01-01T00:00:00"",""ChangeTime"":""0001-01-01T00:00:00"",""Group"":"""",""SubGroup"":"""",""Module"":"""",""AssignmentStatus"":"""",""KPIChallenge"":false,""KPI1Status"":"""",""KPI1User"":"""",""KPI1Date"":""0001-01-01T00:00:00"",""KPI1Time"":""0001-01-01T00:00:00"",""KPI2Status"":"""",""KPI2User"":"""",""KPI2Date"":""0001-01-01T00:00:00"",""KPI2Time"":""0001-01-01T00:00:00"",""SessionID"":null}'}";
System.Diagnostics.Debug.Print(postData);
//get a reference to the request-stream, and write the postData to it
using (Stream s = request.GetRequestStream())
{
using (StreamWriter sw = new StreamWriter(s))
sw.Write(postData);
}
//get response-stream, and use a streamReader to read the content
using (Stream s = request.GetResponse().GetResponseStream())
{
using (StreamReader sr = new StreamReader(s))
{
string jsonData = sr.ReadToEnd();
JObject jObject = JObject.Parse(jsonData);
JToken jHeatItem = jObject["HeatItem"];
}
}
}
Глядя на postData выше, форматирование строки json, как указано выше, работает, однако, когда я проверяю строку на http://jsonlint.com/ а> проверка не проходит. Когда я передаю проверенную строку json следующим образом:
{ "json": { "BusinessPartner": "00000000-0000-0000-0000-000000000000", "CaseNumber": 4, "CaseDescription": "первый случай", "CaseType": "", "CaseSeverity": "" , "DueDate": "0001-01-01T00:00:00", "AssignmentNumber": 5, "AssignmentDescription": "", "AssignmentCreation": "0001-01-01T00:00:00", "AssignmentTime": "0001-01-01T00:00:00", "ChangeDate": "0001-01-01T00:00:00", "ChangeTime": "0001-01-01T00:00:00", "Группа": "" , "SubGroup": "", "Module": "", "AssignmentStatus": "", "KPIChallenge": false, "KPI1Status": "", "KPI1User": "", "KPI1Date": "0001-01 -01T00:00:00", "KPI1Time": "0001-01-01T00:00:00", "KPI2Status": "", "KPI2User": "", "KPI2Date": "0001-01-01T00:00 :00", "KPI2Time": "0001-01-01T00:00:00", "SessionID": null } }
веб-сервис возвращает 500 Internal Server Error, что, как я полагаю, связано с тем, что ему не нравится переданный аргумент. Я относительно новичок в этом, и мне интересно, может ли кто-нибудь помочь мне понять это немного лучше.
Также глядя на ответ (для рабочего примера), возвращаемый json содержит три обратных наклона \\, я считаю, чтобы избежать кавычек. Это делает этот вызов
JObject jObject = JObject.Parse(jsonData);
JToken jHeatItem = jObject["HeatItem"];
терпеть неудачу. Есть идеи, почему?
Спасибо, Томас.
HeatItemResponse
, а не строку? Если сериализация JSON работает так, как должна, вы не должны получать обратную косую черту. 08.10.2012