J'ai la méthode suivante et j'ai besoin de désérialiser le flux de récupération.Comment désérialiser JSON Stream dans C#
public void RedirectHyperlink(System.IO.Stream jsonString)
{
string val= JsonSteamToString(jsonString);
}
public string JsonSteamToString(Stream jsonStream)
{
StreamReader reader = new StreamReader(jsonStream);
return reader.ReadToEnd();
}
Ma classe est la suivante:
public class H2JsonStateObject
{
public string url { get; set; }
public string stateId { get; set; }
}
J'appelle cette méthode utilisant l'appel Ajax comme suit:
var value ="89aafdec-0a9e-4d05-b04e-1ca4bf8cfeb9";
var link="RedirectPage.aspx";
var data = '{"url":"' + link + '","stateId":"' + value + '"}';
var jsonToSend = JSON.stringify(data);
$.ajax({
cache: false,
url: "StateRedirectService.svc/RefreshPagemethod",
type: "POST",
async: false,
data: jsonToSend,
success: function (data, textStatus, jqXHR) {
window.location.href = link;
},
error: function (xhr, status, error) {
alert('error');
}
});
Lorsque la demande de réception à la méthode Web et après la conversion du la valeur obtient la chaîne suivante.
"\"{\\\"url\\\":\\\"RedirectPage.aspx\\\",\\\"stateId\\\":\\\"89aafdec-0a9e-4d05-b04e-1ca4bf8cfeb9\\\"}\""
Maintenant je dois désérialiser url & stateid. Comment puis je faire ça?
J'ai essayé les suivants. mais ne pouvait pas désérialiser.
En utilisant DataContractJsonSerializer
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(val)))
{
DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(H2JsonStateObject));
H2JsonStateObject p2 = (H2JsonStateObject)deserializer.ReadObject(ms);
}
Il émet une exception et dit: état Expecting 'élément' .. Rencontrés 'Texte' avec le nom '', '' namespace.
En utilisant JavaScriptSerializer
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
Object obj = serializer.DeserializeObject(val);
Cela me donne mon objet en tant que valeur de chaîne comme suit:
"{\"url\":\"RedirectPage.aspx\",\"stateId\":\"89aafdec-0a9e-4d05-b04e-1ca4bf8cfeb9\"}"
Ce que je fait de mal et comment puis-je obtenir RedirectPage.aspx et 89aafdec-0a9e- 4d05-b04e-1ca4bf8cfeb9 valeur?
Pensez à utiliser une bibliothèque JSON comme [JSON.net] (http://www.nuget.org/packages/newtonsoft.json/). –
Ensuite, voir http://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object?rq=1. –