Ich konvertiere meine NewtonSoft-Implementierung in eine neue JSON-Bibliothek in .net Core 3.0. Ich habe den folgenden Code
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;
}
}
Ich kann kein Äquivalent für finden JObject.Parse(json);
Was auch das Attribut sein JsonProperty
Äquivalent
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; }
}
Eine weitere Sache, nach der ich suchen werde Formating.None
.
c#
serialization
json.net
.net-core-3.0
system.text.json
Kamran Shahid
quelle
quelle
Antworten:
Sie stellen hier einige Fragen:
Ich kann kein Äquivalent für finden
JObject.Parse(json);
Sie können verwendet werden,
JsonDocument
um zu analysieren jede JSON und zu untersuchen, mit seinem StartRootElement
. DasJsonElement
Stammelement ist vom Typ, der einen beliebigen JSON-Wert (primitiv oder nicht) darstellt und dem von Newtonsoft entsprichtJToken
.Aber nehmen Sie zur Kenntnis dieser Dokumentation Bemerkung :
Wenn Sie ein
JsonElement
Dokument außerhalb der Lebensdauer des Dokuments verwenden müssen, müssen Sie es klonen :Beachten Sie auch, dass dies
JsonDocument
derzeit schreibgeschützt ist und keine API zum Erstellen oder Ändern von JSON bereitstellt. Es gibt ein offenes Problem, Problem Nr. 39922: Beschreibbares Json-DOM , das dies verfolgt.Ein Anwendungsbeispiel lautet wie folgt:
Was ist auch das Attributäquivalent
JsonProperty
?Attribute, die gesteuert
JsonSerializer
werden können, werden imSystem.Text.Json.Serialization
Namespace platziert und von einer abstrakten Basisklasse geerbtJsonAttribute
. Im Gegensatz dazuJsonProperty
gibt es kein Omnibus-Attribut, das alle Aspekte der Eigenschaftsserialisierung steuern kann. Stattdessen gibt es bestimmte Attribute, um bestimmte Aspekte zu steuern.Ab .NET Core 3 gehören dazu:
[JsonPropertyNameAttribute(string)]
::Mit diesem Attribut möchten Sie die serialisierten Namen Ihrer
ResponseJson
Klasse steuern :[JsonConverterAttribute(Type)]
::Beachten Sie, dass die dokumentierte Priorität von Konvertern - Attribut für Eigenschaft, dann die Konverter-Auflistung in Optionen und dann das Attribut für Typ - von der dokumentierten Reihenfolge für Newtonsoft-Konverter abweicht , bei der es sich um den JsonConverter handelt, der durch das Attribut eines Mitglieds und dann um den JsonConverter definiert wird definiert durch ein Attribut für eine Klasse und schließlich alle an den JsonSerializer übergebenen Konverter.
[JsonExtensionDataAttribute]
- entspricht Newtonsofts[JsonExtensionData]
.[JsonIgnoreAttribute]
- entspricht Newtonsofts[JsonIgnore]
.Beim Schreiben von JSON über
Utf8JsonWriter
kann der Einzug durch EinstellenJsonWriterOptions.Indented
auftrue
oder gesteuert werdenfalse
.Bei der Serialisierung zu JSON über
JsonSerializer.Serialize
kann der Einzug durch EinstellenJsonSerializerOptions.WriteIndented
auftrue
oder gesteuert werdenfalse
.Demo-Geige hier zeigt Serialisierung mit
JsonSerializer
und Parsing mitJsonDocument
.quelle
Dieser Link soll Sie zum Laufen bringen, von denen ich unten Ausschnitte kopiert habe.
https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/
quelle
Sie können dieselbe Version wie Ihr anderes Paket installieren
dann
quelle