Есть ли способ передать список объектов JSON из JS в C #? - PullRequest
2 голосов
/ 22 ноября 2010

Что-то я путаю. Javascript будет производить следующие данные JSON.

{type:"book"     , author: "Lian", Publisher: "ABC"}
{type:"Newspaper", author: "Noke"}

Это всего лишь пример, на самом деле у меня есть нечто большее.

Поскольку у меня есть общие поля между различными данными JSON, поэтому я не знаю, возможно ли передать это в C # одновременно. Что я хочу сделать, это передать это в C #, а затем выполнить некоторую обработку, что является лучшим способом сделать? Я использую ASP.NET MVC2.

Спасибо за ваш ответ или подсказки.

Ответы [ 3 ]

3 голосов
/ 22 ноября 2010

Комбинация из 2 приведенных выше операторов JSON вместе не является допустимым JSON.При этом вы не сможете использовать класс JavaScriptSerializer для прямой десериализации этих данных в структуру c #.Вместо этого вам сначала нужно будет выполнить какой-то ручной анализ, чтобы разбить его на допустимый JSON или просто полностью выполнить ручной анализ.

Я бы порекомендовал вместо этого отправлять правильный JSON.Вы можете сделать это, выполнив что-то вроде этого:

{list: [
    {type:"book"     , author: "Lian", Publisher: "ABC"},
    {type:"Newspaper", author: "Noke"} ]

Трудно сказать точно, поскольку только вы знаете детали вашего варианта использования.Вы можете отправить эти данные, используя традиционный запрос «ajax».Это очень легко сделать с любой из множества библиотек JS, но я бы рекомендовал в любом случае просто использовать одну из них - они предлагают конструкции более высокого уровня, которые проще в использовании (и решают кросс-браузерные идиосинкразии).

Поскольку вы используете ASP.NET MVC2, я бы порекомендовал jQuery.Microsoft теперь поддерживает jQuery в качестве своей библиотеки JS и даже устанавливает ее по умолчанию для новых веб-проектов.

Как только вы передадите вышеупомянутый JSON в C #, вы можете десериализовать его, выполнив что-то вроде этого:

JavaScriptSerializer serializer = new JavaScriptSerializer();
var result = serialzer.Deserialize<Dictionary<string, object>>(postedJSONData);

Ваш результат будет иметь структуру, похожую на эту, в C #:

Dictionary<string, object> result =>
    { "list" => object },
                object => List<object>,
                          List<object> => Dictionary<string, object>
                                          { "type" => "book", "author" => "Lian" } // etc
2 голосов
/ 22 ноября 2010
[
    {type:"book"     , author: "Lian", Publisher: "ABC"},
    {type:"Newspaper", author: "Noke"}
]

Все еще является допустимым JSON (ну, на самом деле ключи также должны быть заключены в "), поэтому вы можете .push() в массив каждый раз, когда вы создаете запись JSON.

var list = [];
// code doing other stuff
list.push({type:"book"     , author: "Lian", Publisher: "ABC"});
// more code doing other stuff
list.push({type:"Newspaper", author: "Noke"})

Как только ваш список JSON создан, вы можете отправить этот список бэкэнду за один раз.

0 голосов
/ 22 ноября 2010

Вы также можете использовать JavaScriptSerializer для десериализации своего собственного пользовательского типа. По сути, вы делаете очень простой тип со всеми свойствами ваших объектов json, затем вызываете

JavaScriptSerializer serializer = new JavaScriptSerializer();
MyType result = serialzer.Deserialize<MyType>(JsonData);

Вы также можете десериализовать массив

MyType[] result = serialzer.Deserialize<MyType[]>(JsonData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...