Передача массива из javascript в c#

у меня есть массив в javascript, и мне нужно получить его на мой c# webMethod. как лучше всего это сделать?

мой код C#, как это:

 [WebMethod]
public static void SaveView(string[]  myArray, string[] filter)
{
}

изменить--

мои данные json выглядят так:

{"myArray":[{"name":"Title","index":"Title","hidden":false,"id":"1","sortable":true,"searchoptions":{"sopt":["cn","eq","bw","ew"]},"width":419,"title":true,"widthOrg":150,"resizable":true,"label":"Title","search":true,"stype":"text"},{"name":"Author","index":"Author","hidden":false,"id":"3","sortable":true,"searchoptions":{"sopt":["cn","eq","bw","ew"]},"width":419,"title":true,"widthOrg":150,"resizable":true,"label":"Author","search":true,"stype":"text"}]}

но я не работаю... есть идеи почему?

большое спасибо.

2 ответов


вы можете отправить его как строку JSON. Вот пример использования jQuery:

var array = [ 'foo', 'bar', 'baz' ];
$.ajax({
    url: '/foo.aspx/SaveView',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ myArray: array }),
    success: function(result) {

    }
});

если ваш метод возвращает что-то, вы должны использовать result.d свойство в успешном обратном вызове для получения результата вызова метода страницы.

если вы не используете jQuery, вам придется вручную учитывать различия в браузере при отправке запроса AJAX. Но для этого, чтобы работать есть 2 важные вещи, которые должны быть включены в запрос:

  • в Заголовок запроса Content-Type должен быть установлен в application/json
  • полезная нагрузка запроса должна быть JSON, например:{ myArray: [ 'foo', 'bar', 'baz' ] }

обновление:

теперь, когда вы обновили свой вопрос, кажется, что вы больше не хотите отправлять массив строк. Поэтому определите модель, которая будет соответствовать структуре JSON, которую вы отправляете:

public class Model
{
    public string Name { get; set; }
    public string Index { get; set; }
    public bool Hidden { get; set; }
    public int Id { get; set; }
    public bool Sortable { get; set; }
    public SearchOption Searchoptions { get; set; }
    public int Width { get; set; }
    public bool Title { get; set; }
    public int WidthOrg { get; set; }
    public bool Resizable { get; set; }
    public string Label { get; set; }
    public bool Search { get; set; }
    public string Stype { get; set; }
}

public class SearchOption
{
    public string[] Sopt { get; set; }
}

и затем:

[WebMethod]
public static void SaveView(Model[] myArray)
{
}

var xhr = new XMLHttpRequest();
xhr.open("POST", "mypage/SaveView");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({ myArray: someArray }));