Je commence à migrer du code que j'ai de Newtonsoft.Json
Vers System.Text.Json
Dans une application .net Core 3.0.
J'ai migré les propriétés de
[JsonProperty("id")]
à [JsonPropertyName("id")]
mais j'ai quelques propriétés décorées avec l'attribut JsonConverter
comme:
[JsonConverter(typeof(DateTimeConverter))] [JsonPropertyName("birth_date")] DateTime BirthDate{ get; set; }
Mais je ne trouve pas l'équivalent de ce convertisseur Newtonsoft dans System.Text.Json
Est-ce que quelqu'un sait comment cela peut être réalisé dans .net Core 3.0?
Merci!
System.Text.Json
prend désormais en charge les convertisseurs de type personnalisé dans .NET 3.0 preview-7 et versions ultérieures.
Vous pouvez ajouter des convertisseurs qui correspondent au type et utiliser l'attribut JsonConverter
pour utiliser un convertisseur spécifique pour une propriété.
Voici un exemple de conversion entre long
et string
(car javascript ne prend pas en charge les entiers 64 bits).
public class LongToStringConverter : JsonConverter<long>
{
public override long Read(ref Utf8JsonReader reader, Type type, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.String)
{
// try to parse number directly from bytes
ReadOnlySpan<byte> span = reader.HasValueSequence ? reader.ValueSequence.ToArray() : reader.ValueSpan;
if (Utf8Parser.TryParse(span, out long number, out int bytesConsumed) && span.Length == bytesConsumed)
return number;
// try to parse from a string if the above failed, this covers cases with other escaped/UTF characters
if (Int64.TryParse(reader.GetString(), out number))
return number;
}
// fallback to default handling
return reader.GetInt64();
}
public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString());
}
}
Enregistrez le convertisseur en l'ajoutant à la liste Converters
dans JsonSerializerOptions
services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new LongToStringConverter());
});
Remarque: la version actuelle ne prend pas encore en charge les types nullables.
Vous pouvez trouver le JsonConverterAttribute
dans l'espace de noms System.Text.Json.Serialization
.