Как передать битмассив из javascript в С#

Я хочу передать bitArray из моего файла javascript в мой метод в webApi

Я создаю bitArray, как показано ниже, в моем файле javascript.

 var myBits = new BitArray(2);
 myBits.setAt(1,false);
 myBits.setAt(2,true);

Затем я вызываю метод в webApi, как показано ниже.

 public int ConvertArray(BitArray a)
    {
        //some logic
    }

Я использую Breeze для передачи данных в webapi, поэтому я пытаюсь передать данные, как показано ниже.

var query = EntityQuery.from("ConvertArray")
                  .withParameters({ a: myBits });
        manager1.executeQuery(query);

Но когда я ставлю точку останова в своем методе webapi, я получаю пустые данные. Но когда я ставлю точку останова в javascript, пока я передаю данные, я получаю 2 записи или я должен сказать 2 битовых массива.

Кто-нибудь знает, как передать битмассив в вебапи?

Обновление 1

Вот как мой битовый массив выглядит в моем коде BitArray


person James    schedule 03.09.2014    source источник
comment
Какой у вас JavaScript BitArray? Похоже на какой-то пользовательский объект...   -  person Alexei Levenkov    schedule 03.09.2014
comment
@AlexeiLevenkov я использую пользовательский объект   -  person James    schedule 03.09.2014
comment
Как выглядит ваш json?   -  person L.B    schedule 03.09.2014
comment
@L.B я обновил вопрос   -  person James    schedule 03.09.2014
comment
Это может быть совершенно неуместно, но, возможно, вам придется передать его как битовую строку на веб-сервер, а затем преобразовать ее в BitArray, как только вы получите там строку. Просто подкидываю идею...   -  person David Sherret    schedule 03.09.2014
comment
@DavidSherret, как я могу передать это как битовую строку   -  person James    schedule 03.09.2014
comment
@Happy Я опубликовал ответ, объясняющий, как это сделать.   -  person David Sherret    schedule 04.09.2014


Ответы (2)


Одна из возможностей состоит в том, чтобы сохранить BitArray в виде битовой строки перед отправкой на сервер, а затем преобразовать его в C# BitArray, как только строка достигнет серверной части.

JavaScript

BitArray.prototype.toString = function() {
    this.m_bits.join('');
};

Используйте этот метод, чтобы изменить массив типа [ 1, 0, 1, 0 ] на строку 1010.

С#

BitArray a = new BitArray(bitString.Select(c => c == '1' ? true : false).ToArray());
person David Sherret    schedule 03.09.2014
comment
Я получаю неопределенность, когда использую прототип.toString - person James; 04.09.2014
comment
@Happy, вам нужно определить toString как функцию BitArray, которая возвращает базовый числовой массив в виде строки 1s и 0s. Выше приведен пример, и вы обычно используете его, делая что-то вроде myBits.toString(). Может быть, вы могли бы опубликовать код для BitArray? - person David Sherret; 04.09.2014
comment
Я получил представление о битовом массиве из этого stackoverflow.com/questions/6972717/ - person James; 04.09.2014
comment
Это сработало, когда я использовал myBits.toString. Большое спасибо. Но не могли бы вы объяснить мне код new BitArray(bitString.Select(c =› c == '1' ? true : false).ToArray()); я многого не понял - person James; 04.09.2014
comment
Передайте myBits.toString() на сервер и измените заголовок функции ConvertArray на public int ConvertArray(string bitString), чтобы принять строку. Когда у вас есть эта строка, вы можете подключить этот код С# выше, чтобы получить BitArray из строки. Что делает этот код, так это перебирает каждый символ в строке и создает новый логический массив, где 1 => true и 0 => false. Затем он передает этот массив конструктору BitArray, который создает новый BitArray на основе логического массива. - person David Sherret; 04.09.2014

Breeze отправляет параметры запроса в URL-адресе, поэтому их необходимо сериализовать в строку. Ваш прототип BitArray должен иметь метод toString(), который сериализует биты так, чтобы ваш сервер мог их понять.

person Steve Schmitt    schedule 03.09.2014
comment
Можете ли вы сказать, как сделать? - person James; 04.09.2014