Сериализация / десериализация JSON в ASP.Net Core

132

Поскольку нет JavaScriptSerializer, то какую встроенную реализацию можно использовать для этого?

Я заметил JsonResultи могу с его помощью форматировать данные в JSON, но как мне десериализовать?

Или, может быть, мне не хватает некоторых зависимостей project.json?

Якуб Вишневски
источник

Ответы:

235

Вы можете использовать Newtonsoft.Json, это Microsoft.AspNet.Mvc.ModelBindingзависимость от Microsoft.AspNet.Mvc. Итак, вам не нужно добавлять зависимость в свой project.json.

#using Newtonsoft.Json
....
JsonConvert.DeserializeObject(json);

Обратите внимание: при использовании контроллера WebAPI вам не нужно иметь дело с JSON.

ОБНОВЛЕНИЕ ASP.Net Core 3.0

Json.NET был удален из общей платформы ASP.NET Core 3.0.

Вы можете использовать новые слои сериализатора JSON поверх высокопроизводительных Utf8JsonReaderи Utf8JsonWriter. Он десериализует объекты из JSON и сериализует объекты в JSON. Выделение памяти минимально и включает поддержку асинхронного чтения и записи JSON с помощью Stream.

Для начала используйте JsonSerializerкласс в System.Text.Json.Serializationпространстве имен. См. Документацию для получения информации и примеров.

Чтобы использовать Json.NET в проекте ASP.NET Core 3.0:

    services.AddMvc()
        .AddNewtonsoftJson();

Чтение поддержка Json.NET в Миграции из ASP.NET Ядра 2.2 до 3.0 Preview 2 для получения дополнительной информации.

Агуа с Марса
источник
Теперь AspNetCore.Mcv не зависит от Newtonsoft.JSON. Сборка Microsoft.AspNet.Mvc.Formatters.Json, используемая для сериализации.
Роман Покровский
9
@RomanPokrovskij, неправильно,: Microsoft.AspNetCore.Mvc.Formatters.Jsonимеет зависимость, от Microsoft.AspNetCore.JsonPatchкоторой зависит от Newtonsoft.Json9.0.1 nuget.org/packages/Microsoft.AspNetCore.Mvc.Formatters.Json , nuget.org/packages/Microsoft.AspNetCore.JsonPatch
agua from mars
Вы также можете использовать JsonConvert.DeserializeObject <YourClass> (json) для десериализации в определенный класс.
Нуно Рибейро,
15

.net ядро

using System.Text.Json;

Для сериализации

var jsonStr = JsonSerializer.Serialize(MyObject)

Deserialize

var weatherForecast = JsonSerializer.Deserialize<MyObject>(jsonStr);

Дополнительные сведения об исключении свойств и значений NULL см. На этой стороне Microsoft.

NoloMokgosi
источник
вы знаете, как десериализовать json в динамический тип?
zolty13