Я конвертирую свою реализацию newtonsoft в новую библиотеку JSON в .net core 3.0. У меня есть следующий код
public static bool IsValidJson(string json)
{
try
{
JObject.Parse(json);
return true;
}
catch (Exception ex)
{
Logger.ErrorFormat("Invalid Json Received {0}", json);
Logger.Fatal(ex.Message);
return false;
}
}
Я не могу найти эквивалент для JObject.Parse(json);
И что будет JsonProperty
эквивалентным атрибутом
public class ResponseJson
{
[JsonProperty(PropertyName = "status")]
public bool Status { get; set; }
[JsonProperty(PropertyName = "message")]
public string Message { get; set; }
[JsonProperty(PropertyName = "Log_id")]
public string LogId { get; set; }
[JsonProperty(PropertyName = "Log_status")]
public string LogStatus { get; set; }
public string FailureReason { get; set; }
}
Еще одна вещь, которую я буду искать эквивалент Formating.None
.
c#
serialization
json.net
.net-core-3.0
system.text.json
Камран Шахид
источник
источник
Ответы:
Вы задаете несколько вопросов здесь:
Я не могу найти эквивалент для
JObject.Parse(json);
Вы можете использовать
JsonDocument
для анализа и изучения любого JSON, начиная с егоRootElement
. Корневой элемент имеет тип,JsonElement
который представляет любое значение JSON (примитивное или нет) и соответствует Newtonsoft'sJToken
.Но обратите внимание на это замечание по документации :
Когда вам нужно использовать
JsonElement
внешнюю часть своего документа, вы должны клонировать его:Также обратите внимание, что
JsonDocument
в настоящее время только для чтения и не предоставляет API для создания или изменения JSON. Существует открытая проблема № 39922: Записываемый Json DOM отслеживает это.Пример использования следующий:
И что будет
JsonProperty
эквивалентным атрибутом ?Атрибуты, которыми можно управлять
JsonSerializer
, помещаются вSystem.Text.Json.Serialization
пространство имен и наследуются от абстрактного базового классаJsonAttribute
. В отличие от этогоJsonProperty
, отсутствует атрибут omnibus, который может управлять всеми аспектами сериализации свойств. Вместо этого есть определенные атрибуты для управления конкретными аспектами.Начиная с .NET Core 3 они включают:
[JsonPropertyNameAttribute(string)]
:Этот атрибут вы хотите использовать для управления сериализованными именами вашего
ResponseJson
класса:[JsonConverterAttribute(Type)]
:Обратите внимание, что задокументированный приоритет конвертеров - Атрибут для свойства, затем коллекция Конвертеры в опциях, затем Атрибут для типа - отличается от документированного порядка для конвертеров Newtonsoft , который JsonConverter, определяемым атрибутом для члена, а затем JsonConverter. определяется атрибутом класса, и, наконец, любые преобразователи передаются в JsonSerializer.
[JsonExtensionDataAttribute]
- соответствует Ньютонсофт[JsonExtensionData]
.[JsonIgnoreAttribute]
- соответствует Ньютонсофт[JsonIgnore]
.При написании JSON через
Utf8JsonWriter
отступ можно управлять настройкойJsonWriterOptions.Indented
наtrue
илиfalse
.При сериализации в JSON Via
JsonSerializer.Serialize
, отступы можно регулировать путем установкиJsonSerializerOptions.WriteIndented
наtrue
илиfalse
.Демо скрипку здесь показывая сериализации с
JsonSerializer
и разбора сJsonDocument
.источник
Эта ссылка должна помочь вам, фрагменты которой я скопировал ниже.
https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/
источник
Вы можете такую же версию установить другой пакет
тогда
источник