У меня есть объектная модель, которая выглядит так:
public MyObjectInJson
{
public long ObjectID {get;set;}
public string ObjectInJson {get;set;}
}
Свойство ObjectInJson
представляет собой уже сериализованную версию объекта, содержащего вложенные списки. На данный момент я сериализирую список MyObjectInJson
вручную следующим образом:
StringBuilder TheListBuilder = new StringBuilder();
TheListBuilder.Append("[");
int TheCounter = 0;
foreach (MyObjectInJson TheObject in TheList)
{
TheCounter++;
TheListBuilder.Append(TheObject.ObjectInJson);
if (TheCounter != TheList.Count())
{
TheListBuilder.Append(",");
}
}
TheListBuilder.Append("]");
return TheListBuilder.ToString();
Интересно, смогу ли я заменить этот опасный код JavascriptSerializer
и получить те же результаты? Как бы я это сделал?
Спасибо.
System.Web.Extensions
на использованиеSystem.Web.Script.Serialization
: stackoverflow.com/a/18746092/1599699 stackoverflow.com/a/19299695/1599699Ответы:
При использовании .Net Core 3.0 или более поздней версии;
По умолчанию используется встроенный
System.Text.Json
синтаксический анализатор.например
в качестве альтернативы доступны другие, менее распространенные варианты, такие как Utf8Json parser и Jil : они могут предложить превосходную производительность , если вам это действительно нужно, но вам нужно будет установить соответствующие пакеты.
Если застрять с использованием .Net Core 2.2 или более ранней версии;
По умолчанию используется Newtonsoft JSON.Net в качестве первого выбора JSON Parser.
например
вам может понадобиться сначала установить пакет.
Для получения более подробной информации см. И ответьте на вопрос, который является источником этой информации .
Только для справки, это был оригинальный ответ много лет назад;
источник
Вы также можете использовать Json.NET. Просто скачайте его по адресу http://james.newtonking.com/pages/json-net.aspx , извлеките сжатый файл и добавьте его в качестве ссылки.
Затем просто сериализуйте список (или любой другой объект) с помощью следующего:
Обновление: вы также можете добавить его в свой проект с помощью диспетчера пакетов NuGet (Инструменты -> Диспетчер пакетов NuGet -> Консоль диспетчера пакетов):
Документация: сериализация коллекций
источник
Есть два распространенных способа сделать это с помощью встроенных сериализаторов JSON:
JavaScriptSerializer
DataContractJsonSerializer
Обратите внимание, что этот параметр требует определения контракта данных для вашего класса:
источник
источник
.NET уже поддерживает базовую сериализацию Json через пространство имен System.Runtime.Serialization.Json и DataContractJsonSerializer. класс начиная с версии 3.5. Как следует из названия, DataContractJsonSerializer учитывает любые аннотации данных, которые вы добавляете к своим объектам для создания окончательного вывода Json.
Это может быть удобно, если у вас уже есть аннотированные классы данных, которые вы хотите сериализовать Json в поток, как описано в разделе Практическое руководство. Сериализация и десериализация данных JSON. . Существуют ограничения, но это достаточно хорошо и достаточно быстро, если у вас есть базовые потребности и вы не хотите добавлять в свой проект еще одну библиотеку.
Следующий код сериализует список в поток вывода консоли. Как вы видите, он немного более многословен, чем Json.NET, и не является типобезопасным (то есть не имеет обобщений)
С другой стороны, Json.NET обеспечивает гораздо лучший контроль над тем, как вы генерируете Json. Это очень ОЧЕНЬ удобно, когда вам нужно сопоставить имена, дружественные к JavaScript, к классам .NET, форматировать даты в json и т. Д.
Другим вариантом является ServiceStack.Text , часть стека ServicStack ..., который предоставляет набор очень быстрых сериализаторов для Json, JSV и CSV.
источник
основанный на ответе из другого сообщения. Я придумала более общий способ составления списка, используя динамический поиск с Json.NET версии 12.x.
призыв к процессу
или этот призыв к процессу
источник