J'ai mon MVC2 RESTFul webservice prêt à accepter JSON et revenir un peu en utilisant un exemple que je trouve hereFaire correcte JSON Poster sur C# pour MVC 2 REST webservice
Good stuff, ce exemple fonctionne très bien l'affichage de la JSON via jQuery, et la manipulation de la réponse 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);
}
});
});
});
Cependant, je dois appeler mon webservice automatiquement (un serveur d'appeler un autre, pas côté client jQuery ici). Donc, je fais tout cela en 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)
{
}
}
Excep, lorsque le DataContractJsonSerializer sérialise mon objet que je reçois des ordures avec un tas de balises échappées:
"{\"<Age>k__BackingField\":24,\"<Name>k__BackingField\":\"Jordan\"}"
ne ressemble pas bon JSON à moi !?
fixe:
"{\"Age\":24,\"Name\":\"Jordan\"}"
La classe, est bien decordated:
[Serializable]
public class PersonInputModel {
public string Name { get; set; }
public int Age { get; set; }
}
fixe:
[DataContract]
public class PersonInputModel {
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
Et que quand je lance le webservice, et mis dans l'URL, il Je ne suis jamais touché même lorsque je traverse ce code.
Qu'est-ce qui me manque?
Merci!
Un examen plus approfondi à l'aide Fiddler, je ne vois pas un "POST" qui aura lieu du tout comme je l'étape par:
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();
pensées?
Merci pour le rappel Je reviens avec mes résultats –
Cela a amélioré la mise en forme de la chaîne JSON - "{\" Age \ ": 24, \" Name \ ": \" Jordan \ "}", semble assez solide , les guillemets sont échappés, ce qui est bien dans le débogueur et je suppose que c'est correct. –
Je ne suis toujours pas au service quand je cours le code avec un point d'arrêt sur le service d'attente ?! J'ai vérifié pour m'assurer que mon URL est correcte. –