Мой веб-сервис MVC2 RESTFul полностью настроен на прием JSON и возвращает некоторые из них с помощью примера, который я нашел здесь
Хорошие вещи, этот пример работает простохорошая отправка JSON через jQuery и обработка ответа JSON:
$(function () {
$("#personCreate").click(function () {
var person = getPerson();
// poor man's validation
if (person == null) {
alert("Specify a name please!");
return;
}
var json = $.toJSON(person);
$.ajax({
url: '/home/save',
type: 'POST',
dataType: 'json',
data: json,
contentType: 'application/json; charset=utf-8',
success: function (data) {
// get the result and do some magic with it
var message = data.Message;
$("#resultMessage").html(message);
}
});
});
});
Однако мне нужно автоматически вызывать мой веб-сервис (один сервер вызывает другой, без клиентской стороны).JQUERY здесь).Так что я делаю все это в C #:
private static void MakeJSONServiceCall(PersonInputModel person)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ServiceUrl);
request.Method = "POST";
request.ContentType = "application/json; charset:utf-8";
DataContractJsonSerializer ser = new DataContractJsonSerializer(person.GetType());
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, person);
String json = Encoding.UTF8.GetString(ms.ToArray());
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(json);
writer.Close();
}
catch (Exception e)
{
}
}
За исключением случаев, когда DataContractJsonSerializer сериализует мой объект, я получаю мусор с кучей экранированных тегов:
"{\"<Age>k__BackingField\":24,\"<Name>k__BackingField\":\"Jordan\"}"
Не похоже на хороший JSON для меня!?
Исправлено:
"{\"Age\":24,\"Name\":\"Jordan\"}"
Класс, правильно декорированный:
[Serializable]
public class PersonInputModel {
public string Name { get; set; }
public int Age { get; set; }
}
Исправлено:
[DataContract]
public class PersonInputModel {
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
А потом, когда я запускаю веб-сервис и вставляю URL, он никогда не попадет, даже когда я перебираю этот код.
Что мне не хватает?
Спасибо!
При ближайшем рассмотрении с использованием Скрипач я не вижу "POST" вообще, когда я прохожу:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(ServiceUrl);
request.Method = "POST";
request.ContentType = "application/json; charset:utf-8";
DataContractJsonSerializer ser = new DataContractJsonSerializer(person.GetType());
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, person);
String json = Encoding.UTF8.GetString(ms.ToArray());
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(json);
writer.Close();
Мысли