2016-04-29 2 views
2

Я борюсь за проводную проблему JSON. Я работаю с ASP C# и имею представление, отправляющее JS-массив для действия контроллера.C# не распознает JSON Array правильно

Вот структура данных JSON.

public class MapData 
{ 
    public List<Point> Points { get; set; } 
} 

public class Point 
{ 
    public string lat { get; set; } 
    public string lng { get; set; } 
} 

Вот Рутинное я использую для создания JSON массива: для целей тестирования он не генерирует правильный MapData.

$("#pac-save").click(function() { 
    var mapPoints = { 
     Points: [] 
    } 

    mapPoints.Points.push({ 
     lat:"asdf1", 
     lng:"asdf1" 
    }) 
    mapPoints.Points.push({ 
     lat:"asdf2", 
     lng:"asdf2" 
    })  
    $.ajax({ 
     url: "/Map/saveGeplanteRoute", 
     data:mapPoints 
    }).done(function (dd) { 
     alert("done"); 
    }).fail(function() { 
     alert("error"); 
    }); 
}) 

Вот действия контроллера

public JsonResult saveGeplanteRoute(MapData data) 
{ 
    var test = new MapData 
    { 
     Points = new List<Point>() 
    }; 
    test.Points.Add(new Point() { lat = "asdf1", lng = "asdf1" }); 
    test.Points.Add(new Point() { lat = "asdf2", lng = "asdf2" }); 
    return Json(test); 
} 

Странная вещь: Когда я stringify данные перед отправкой, он выглядит следующим образом:

"{"Points":[{"lat":"asdf1","lng":"asdf1"},{"lat":"asdf2","lng":"asdf2"}]}" 

Данные, поступающие назад от внешности контроллера точно так же, когда я его строкую: почему C# не анализирует данные Point? Количество точек данных прав, как вы можете увидеть ниже:

JSON data

Я буду рад на некоторые советы, указывая мне на ошибку я не нашел

+0

Что делает ваш 'Point' класс выглядеть? –

+0

Только что заметил. Благодарю. –

ответ

4

изменить метод HTTP для POST из GET

$.ajax({ 
     url: "/Map/saveGeplanteRoute", 
     type: "POST", 
     data: mapPoints 
    }).done(function (dd) { 
     alert("done"); 
    }).fail(function() { 
     alert("error"); 
    }); 

GET метод отправляет данные с использованием URL-строки, которая не является JSON дружественным

+0

Большое спасибо, что сделал трюк – climbah

0

В JavaScript, где вы генерировать данные теста, положить его лат и имена LNG между кавычками: mapPoints.Points.push ({ "LAT": "asdf1", "LNG": "asdf1"})

0

Если вы не установите метод на вызов $ .ajax йор выдачи HTTP-GET, и сериализации массив в URL, таким образом, вы будут иметь проблемы с длиной URL, если вы попытаетесь сериализовать большой массив.

Лучший способ можно отправить после вызова, и сериализовать массив на теле вызова, это может быть сделано таким образом

$.ajax({ 
    url: "/home/saveGeplanteRoute", 
    data: mapPoints, 
    method: 'POST' 
}) 
.done(function (dd) { 
    alert("done"); 
}).fail(function() { 
    alert("error"); 
}); 
Смежные вопросы