Konwertuję moją implementację newtonsoft do nowej biblioteki JSON w .net core 3.0. Mam następujący kod
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;
}
}
Nie jestem w stanie znaleźć żadnego odpowiednika dla JObject.Parse(json);
Co również będzie JsonProperty
równoważne atrybutowi
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; }
}
Jeszcze jedno będę szukał odpowiednika Formating.None
.
c#
serialization
json.net
.net-core-3.0
system.text.json
Kamran Shahid
źródło
źródło
Odpowiedzi:
Zadajesz tutaj kilka pytań:
Nie jestem w stanie znaleźć żadnego odpowiednika dla
JObject.Parse(json);
Możesz użyć
JsonDocument
do parsowania i sprawdzania dowolnego JSON, zaczynając od jegoRootElement
. Element główny jest typu,JsonElement
który reprezentuje dowolną wartość JSON (pierwotną lub nie) i odpowiada wartości NewtonsoftJToken
.Ale zwróć uwagę na tę uwagę dokumentacji :
Jeśli chcesz użyć dokumentu
JsonElement
poza cyklem życia, musisz go sklonować :Należy również pamiętać, że
JsonDocument
obecnie jest tylko do odczytu i nie zapewnia interfejsu API do tworzenia lub modyfikowania JSON. Istnieje otwarty problem Problem nr 39922: Zapisywalny DOM Json śledzący to.Przykład użycia jest następujący:
Co również będzie
JsonProperty
równoważne atrybutowi ?Atrybuty, które można kontrolować,
JsonSerializer
są umieszczane wSystem.Text.Json.Serialization
przestrzeni nazw i dziedziczą po abstrakcyjnej klasie bazowejJsonAttribute
. W przeciwieństwie do tegoJsonProperty
, nie ma atrybutu omnibus, który mógłby kontrolować wszystkie aspekty serializacji właściwości. Zamiast tego istnieją określone atrybuty kontrolujące określone aspekty.Od .NET Core 3 obejmują one:
[JsonPropertyNameAttribute(string)]
:Jest to atrybut, którego chcesz użyć do sterowania serializowanymi nazwami swojej
ResponseJson
klasy:[JsonConverterAttribute(Type)]
:Należy zauważyć, że udokumentowany priorytet konwerterów - Atrybut na właściwość, następnie kolekcja Konwertery w opcjach, a następnie Atrybut na typ - różni się od udokumentowanej kolejności konwerterów Newtonsoft , którą jest JsonConverter zdefiniowany przez atrybut na elemencie, a następnie JsonConverter zdefiniowane przez atrybut klasy, a na koniec wszelkie konwertery przekazane do JsonSerializer.
[JsonExtensionDataAttribute]
- odpowiada Newtonoftowi[JsonExtensionData]
.[JsonIgnoreAttribute]
- odpowiada Newtonoftowi[JsonIgnore]
.Podczas pisania JSON przez
Utf8JsonWriter
wcięcie można kontrolować, ustawiającJsonWriterOptions.Indented
natrue
lubfalse
.Podczas szeregowania do JSON przez
JsonSerializer.Serialize
, wcięcie może być kontrolowane poprzez ustawienieJsonSerializerOptions.WriteIndented
natrue
lubfalse
.Demonstracyjne skrzypce tutaj pokazujące serializację
JsonSerializer
zi parsowanieJsonDocument
.źródło
Ten link powinien Cię zabrać, fragmenty, które skopiowałem poniżej.
https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/
źródło
Możesz w tej samej wersji zainstalować drugi pakiet
następnie
źródło