Есть ли простой способ заполнить мой объект C # объектом JSON, переданным через AJAX?
Это JSON-объект, переданный в C # WEBMETHOD со страницы с использованием JSON.stringify.
{
"user": {
"name": "asdf",
"teamname": "b",
"email": "c",
"players": ["1", "2"]
}
}
C # WebMetod, который получает объект JSON
[WebMethod]
public static void SaveTeam(Object user)
{
}
Класс C #, который представляет структуру объекта JSON Object, переданного в WebMethod
public class User
{
public string name { get; set; }
public string teamname { get; set; }
public string email { get; set; }
public Array players { get; set; }
}
Ответы:
Хороший способ использовать JSON в C # - это JSON.NET
Быстрый старт и документация по API от JSON.NET - Официальный сайт поможет вам с ним работать.
Пример того, как его использовать:
источник
Так как мы все любим один код лайнеров
Newtonsoft работает быстрее, чем сериализатор Java-скриптов. ... это зависит от пакета Newtonsoft NuGet, который популярен и лучше, чем стандартный сериализатор.
если у нас есть класс, используйте ниже.
нет класса, то использовать динамический
источник
Чтобы оставить ваши настройки открытыми, если вы используете .NET 3.5 или более позднюю версию, приведу обобщенный пример, который вы можете использовать прямо из фреймворка, используя Generics. Как уже упоминали другие, если это не просто простые объекты, вы действительно должны использовать JSON.net.
Тебе понадобиться:
источник
Учитывая ваш пример кода, вам не нужно больше ничего делать.
Если вы передадите эту строку JSON в свой веб-метод, она автоматически проанализирует строку JSON и создаст заполненный объект User в качестве параметра для вашего метода SaveTeam.
Однако, как правило, вы можете использовать
JavascriptSerializer
класс, как показано ниже, или для большей гибкости используйте любую из различных сред Json (Jayrock JSON - хорошая) для легкой манипуляции JSON.источник
System.Web.Extensions
сборку и добавить a,using System.Web.Script.Serialization
чтобы получитьJavaScriptSerializer
, но как только вы это сделаете, это кажется самым чистым способом десериализации вашихjson
строк в конкретные классы c #.Другое действительно простое решение - использование библиотеки Newtonsoft.Json:
источник
Следующие 2 примера используют либо
Пример 1: использование System.Web.Script.Serialization
Использование: объект JSON для объекта Custom C #
Пример 2: использование System.Web.Helpers
Использование: объект JSON для объекта Custom C #
Этот код требует добавления пространства имен System.Web.Helpers, найденного в
Или
Надеюсь это поможет!
источник
dynamic
типами вы не получаете никакой настоящей проверки типов. Например, если ваш JSON содержит"Name" : "Ahmed"
и вы неправильно набрали «Имя» в своем коде на C #, это ошибка времени выполнения (bleh).Более подробную информацию можно найти по следующей ссылке http://ishareidea.blogspot.in/2012/05/json-conversion.html.
О
DataContractJsonSerializer Class
вы можете прочитать здесь .источник
Использование JavaScriptSerializer () менее строгое, чем предлагаемое общее решение: public static T Deserialize (string json)
Это может пригодиться при передаче json на сервер, который не совсем соответствует определению объекта, к которому вы пытаетесь преобразовать.
источник
По производительности я обнаружил, что сериализатор ServiceStack работает немного быстрее, чем другие. Это класс JsonSerializer в пространстве имен ServiceStack.Text.
https://github.com/ServiceStack/ServiceStack.Text
ServiceStack доступен через пакет NuGet: https://www.nuget.org/packages/ServiceStack/
источник
JSON.Net - ваш лучший выбор, но, в зависимости от формы объектов и наличия круговых зависимостей, вы можете использовать JavaScriptSerializer или DataContractSerializer.
источник
Генератор JSON C # класс по CodePlex генерирует классы , которые хорошо работают с NewtonSoftJS.
источник
Сериализатор JavaScript: требуется
using System.Web.Script.Serialization;
Сериализатор контракта данных: требуется
using System.Runtime.Serialization.Json;
- универсальный тип T должен быть сериализуемым больше в контракте данныхисточник
Вместо того, чтобы отправлять как просто объект.
Создайте общедоступный класс доступных свойств и отправьте данные в веб-метод.
использовать те же имена параметров в вызове ajax для отправки данных.
источник