Работа с JSON на стороне сервера в ASP.NET и C # - PullRequest
2 голосов
/ 06 декабря 2010

У меня есть веб-форма ASP.NET, которая использует JQuery на стороне клиента.У меня есть пользовательский интерфейс, который создает коллекцию объектов и хранит их в JSON.После завершения моей клиентской реализации мне нужно работать с этой информацией, когда пользователь нажимает кнопку.Когда нажата эта кнопка, мне нужно пройтись по этой коллекции JSON и проверить записи.Моя проблема в том, что я не уверен, как это сделать.

// Client-Side Code
var myCollection = {
  "data": [
  ]
};


// Server-Side Code
protected void myButton_Click(object sender, EventArgs e)
{
  // Parse JSON
}

Каждый элемент коллекции хранится в свойстве «data».Как мне пройтись по коллекции JSON на стороне сервера?Я думал о том, чтобы поместить данные JSON в скрытый элемент HTML, но это звучало не очень хорошо, и я мог придумать хороший способ сделать это.

Ответы [ 2 ]

1 голос
/ 06 декабря 2010

Как вы отправляете его на сервер, зависит от вас - скрытое поле, вызов AJAX, все, что вы предпочитаете Получив строку на сервере, вам понадобятся 2 вещи:

  1. Представление на стороне сервера C # этого объекта
  2. Конвертер, чтобы пойти из JSON в это представление C #.

Давайте немного скорректируем ваш пример, потому что «myCollection» в вашем примере - это объект, а не коллекция. Поэтому мы назовем это myObject. Во-вторых, мы будем считать, что «данные» - это массив строк. Это может быть что угодно, но мы будем простыми.

var myObject = {
  data: ["string1","string2"]
};

Мы также предполагаем, что вы используете DataContractJsonSerializer, так что вы можете легко отобразить два разных стиля case ... JavaScript обычно является camelCase, а C # обычно ProperCase. Итак, в C # это будет:

[DataContract(Name="myObjectType")]
public class MyObjectType{
  [DataMember(Name="data")]
  public string[] Data { get; set; }
}

Теперь у вас есть два представления одной и той же структуры, одно в c #, другое в JavaScript. Для преобразования из одного в другое мы можем использовать встроенный DataContractJsonSerializer, например:

public static T Deserialize<T>(string json)
{
    using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
    {
      DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
      return (T)serializer.ReadObject(ms);
    }
}

... в результате последний вызов:

MyObjectType myObject = Deserialize<MyObjectType>(incomingString);
0 голосов
/ 06 декабря 2010

JSON в скрытом поле является допустимым способом сделать это, так как данные затем будут отправлены на сервер. Затем вы можете использовать компонент System.Web.Script.Serialization.JavaScriptSerializer, чтобы десериализовать данные (в словарь) и получить к ним доступ таким образом. Не уверен на 100%, как данные массива выходят из этого процесса. Есть также другие инструменты, такие как JSON.NET, также для анализа JSON.

Другим способом является вызов через веб-службу, но он не проходит жизненный цикл страницы.

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...