首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用System.Text.Json中的JsonConverter等效项

使用System.Text.Json中的JsonConverter等效项
EN

Stack Overflow用户
提问于 2019-05-29 20:15:04
回答 2查看 21.4K关注 0票数 26

我开始在.net Core3.0应用中将一些代码从Newtonsoft.Json迁移到System.Text.Json

我将属性从

[JsonProperty("id")][JsonPropertyName("id")]

但是我有一些用JsonConverter属性修饰的属性,如下所示:

[JsonConverter(typeof(DateTimeConverter))] [JsonPropertyName("birth_date")] DateTime BirthDate{ get; set; }

但我在System.Text.Json中找不到与此对应的Newtonsoft转换器。有人知道如何在.net Core3.0中实现这一点吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-03 09:24:22

在.NET 3.0预览版-7和更高版本中,System.Text.Json现在支持自定义类型转换器。

可以添加在类型上匹配的转换器,并使用JsonConverter属性为属性使用特定的转换器。

下面是一个在longstring之间进行转换的例子(因为javascript不支持64位整数)。

代码语言:javascript
复制
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());
    }
}

通过将转换器添加到JsonSerializerOptions中的Converters列表来注册转换器

代码语言:javascript
复制
services.AddControllers().AddJsonOptions(options =>
{
    options.JsonSerializerOptions.Converters.Add(new LongToStringConverter());
});

注意:当前版本还不支持可以为空的类型。

票数 28
EN

Stack Overflow用户

发布于 2019-09-26 03:01:08

您可以在名称空间System.Text.Json.Serialization中找到JsonConverterAttribute

https://docs.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonconverterattribute?view=netcore-3.0

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56360401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档