s yu Ответов: 1

Как десериализовать сложный объект?


В моем приложении я добавил несколько массивов в новый объект массива, а затем разместил данные через AJAX. В myHandler я хочу десериализовать данные в массивы. Но я получил неудачу в десериализации. Если вы знаете, как десериализовать такую цель, я буду признателен, если вы поделитесь своими знаниями.
var arrays = new Array();
arrays.push(ar1);   // ar1 - Array
arrays.push(ar2);   // ar2 - Array but different from ar1 in dimension
arrays.push(ar3);   // ar3 - Array, also different in dimension
$.ajax({
    async: true,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    type: "POST",
    data: { arrays },
    url: "myHandler.ashx",
    success: function (result) { }
});

// code in myHandler.ashx
public void ProcessRequest(HttpContext context)  {
    context.Response.ContentType = "application/json";
    var data = context.Request;
    var sr = new StreamReader(data.InputStream);
    var stream = sr.ReadToEnd();
    var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    vvar obj = javaScriptSerializer.DeserializeObject(stream);    // Got error here

Ниже приведено значение потока:
"ar%5B0%5D%5B%5D=8594&ar%5B0%5D%5B%5D=K02R019&ar%5B0%5D%5B%5D=K02&ar%5B0%5D%5B%5D=IB-K-29&ar%5B0%5D%5B%5D=TRACKWAY&ar%5B0%5D%5B%5D=PRIVATE&ar%5B0%5D%5B%5D=BRASS+DISK&ar%5B0%5D%5B%5D=&ar%5B0%5D%5B%5D=38.88722&ar%5B0%5D%5B%5D=-77.09436&ar%5B0%5D%5B%5D=K02&ar%5B1%5D%5B0%5D%5B%5D=5324&ar%5B1%5D%5B0%5D%5B%5D=8594&ar%5B1%5D%5B0%5D%5B%5D=222%2B54.45&ar%5B1%5D%5B0%5D%5B%5D=22254.45&ar%5B1%5D%5B0%5D%5B%5D=INBOUND&ar%5B1%5D%5B0%5D%5B%5D=&ar%5B1%5D%5B0%5D%5B%5D=&ar%5B1%5D%5B0%5D%5B%5D=POT&ar%5B2%5D%5B0%5D%5B%5D=8594&ar%5B2%5D%5B0%5D%5B%5D=8594&ar%5B2%5D%5B0%5D%5B%5D=K02R019&ar%5B2%5D%5B0%5D%5B%5D=&ar%5B2%5D%5B0%5D%5B%5D=SET&ar%5B2%5D%5B0%5D%5B%5D=5%2F30%2F1905&ar%5B2%5D%5B0%5D%5B%5D=DUFF&ar%5B2%5D%5B0%5D%5B%5D=ON+INVERT&ar%5B2%5D%5B1%5D%5B%5D=18059&ar%5B2%5D%5B1%5D%5B%5D=8594&ar%5B2%5D%5B1%5D%5B%5D=K02R019&ar%5B2%5D%5B1%5D%5B%5D=&ar%5B2%5D%5B1%5D%5B%5D=RECNORECORD&ar%5B2%5D%5B1%5D%5B%5D=&ar%5B2%5D%5B1%5D%5B%5D=&ar%5B2%5D%5B1%5D%5B%5D=null&ar%5B3%5D%5B0%5D%5B%5D=15015&ar%5B3%5D%5B0%5D%5B%5D=8594&ar%5B3%5D%5B0%5D%5B%5D=859
4&ar%5B3%5D%5B0%5D%5B%5D=&ar%5B3%5D%5B0%5D%5B%5D=NAD27VAN&ar%5B3%5D%5B0%5D%5B%5D=447504.445&ar%5B3%5D%5B0%5D%5B%5D=2400018.492&ar%5B3%5D%5B0%5D%5B%5D=null&ar%5B3%5D%5B1%5D%5B%5D=30701&ar%5B3%5D%5B1%5D%5B%5D=8594&ar%5B3%5D%5B1%5D%5B%5D=18059&ar%5B3%5D%5B1%5D%5B%5D=PGIS&ar%5B3%5D%5B1%5D%5B%5D=LDPNSRS2007&ar%5B3%5D%5B1%5D%5B%5D=169632.8118&ar%5B3%5D%5B1%5D%5B%5D=182628.1492&ar%5B3%5D%5B1%5D%5B%5D=null"


Что я уже пробовал:

Как десериализовать сложный объект в массивы?

[no name]

Почему после всего этого времени вы все еще думаете, что люди на полпути по всему миру могут читать ваши мысли или видеть ваш экран?

Richard Deeming

Нажмите кнопку "улучшить вопрос" и добавьте блок кода, содержащий JSON, который вы пытаетесь десериализовать, и полное сообщение об ошибке, которое вы получаете.

1 Ответов

Рейтинг:
4

Richard Deeming

Данные, которые вы публикуете, не являются допустимыми JSON. Расшифровка строки показывает:

ar[0][]=8594&ar[0][]=K02R019&ar[0][]=K02&ar[0][]=IB-K-29&ar[0][]=TRACKWAY&...

Это стандарт application/x-www-form-urlencoded формат, используемый для отправки формы.

Измените свой вызов AJAX на:
$.ajax({
    async: true,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    type: "POST",
    data: JSON.stringify(arrays),
    url: "myHandler.ashx",
    success: function (result) { }
});

Затем вы должны получить допустимую строку JSON в своем stream переменная.


s yu

Замечательно! Ошибка времени выполнения исчезла вместе с вашим кодом. Спасибо снова.