Estoy convirtiendo mi implementación newtonsoft a una nueva biblioteca JSON en .net core 3.0. Tengo el siguiente código
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;
}
}
No puedo encontrar ningún equivalente para JObject.Parse(json);
También cuál será el atributo JsonProperty
equivalente
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; }
}
Una cosa más que estaré buscando es el equivalente Formating.None
.
c#
serialization
json.net
.net-core-3.0
system.text.json
Kamran Shahid
fuente
fuente
Respuestas:
Estás haciendo algunas preguntas aquí:
No puedo encontrar ningún equivalente para
JObject.Parse(json);
Puede usar
JsonDocument
para analizar y examinar cualquier JSON, comenzando con suRootElement
. El elemento raíz es de tipoJsonElement
que representa cualquier valor JSON (primitivo o no) y corresponde al de NewtonsoftJToken
.Pero tome nota de este comentario de documentación :
Cuando necesite usar un documento
JsonElement
fuera de la vida útil de su documento, debe clonarlo :También tenga en cuenta que
JsonDocument
actualmente es de solo lectura y no proporciona una API para crear o modificar JSON. Hay un problema abierto Problema n. ° 39922: el Json de escritura de DOM lo rastrea.Un ejemplo de uso es el siguiente:
Además, ¿cuál será el atributo
JsonProperty
equivalente?Los atributos que pueden controlar
JsonSerializer
se colocan en elSystem.Text.Json.Serialization
espacio de nombres y heredan de una clase base abstractaJsonAttribute
. A diferenciaJsonProperty
, no existe un atributo omnibus que pueda controlar todos los aspectos de la serialización de propiedades. En cambio, hay atributos específicos para controlar aspectos específicos.A partir de .NET Core 3, estos incluyen:
[JsonPropertyNameAttribute(string)]
:Este es el atributo que desea usar para controlar los nombres serializados de su
ResponseJson
clase:[JsonConverterAttribute(Type)]
:Tenga en cuenta que la prioridad documentada de los convertidores ( Atributo en la propiedad, luego la colección Convertidores en opciones, luego el Atributo en el tipo ) difiere del orden documentado para los convertidores Newtonsoft , que es el JsonConverter definido por el atributo en un miembro, luego el JsonConverter definido por un atributo en una clase, y finalmente cualquier convertidor pasado al JsonSerializer.
[JsonExtensionDataAttribute]
- corresponde a la de Newtonsoft[JsonExtensionData]
.[JsonIgnoreAttribute]
- corresponde a la de Newtonsoft[JsonIgnore]
.Al escribir JSON vía
Utf8JsonWriter
, la sangría se puede controlar estableciendoJsonWriterOptions.Indented
entrue
ofalse
.Al serializar a JSON a través de
JsonSerializer.Serialize
, la sangría se puede controlar estableciendoJsonSerializerOptions.WriteIndented
entrue
ofalse
.El violín de demostración aquí muestra la serialización
JsonSerializer
y el análisis conJsonDocument
.fuente
Este enlace debería ayudarlo, fragmentos de los cuales copié a continuación.
https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/
fuente
Puede instalar la misma versión que su otro paquete
entonces
fuente