c# System.Text.Json 反序列化Dictionary<string,object>时未转换基础类型的处理方法

public class ObjectToInferredTypesConverter
       : JsonConverter<object>
        {
            public override object Read(
                ref Utf8JsonReader reader,
                Type typeToConvert,
                JsonSerializerOptions options)
            {
                if (reader.TokenType == JsonTokenType.True)
                {
                    return true;
                }

                if (reader.TokenType == JsonTokenType.False)
                {
                    return false;
                }

                if (reader.TokenType == JsonTokenType.Number)
                {
                    if (reader.TryGetInt64(out long l))
                    {
                        return l;
                    }

                    return reader.GetDouble();
                }

                if (reader.TokenType == JsonTokenType.String)
                {
                    if (reader.TryGetDateTime(out DateTime datetime))
                    {
                        return datetime;
                    }

                    return reader.GetString();
                }

                // Use JsonElement as fallback.
                // Newtonsoft uses JArray or JObject.
                using JsonDocument document = JsonDocument.ParseValue(ref reader);
                return document.RootElement.Clone();
            }

            public override void Write(
                Utf8JsonWriter writer,
                object objectToWrite,
                JsonSerializerOptions options) =>
                    throw new InvalidOperationException("Should not get here.");
        }



//注入配置
 builder.AddJsonOptions(options =>
 {
     options.JsonSerializerOptions.Converters.Add(new ObjectToInferredTypesConverter());

 });

[参考]
netcore 底层序列化Dictionary<string,object> 对象的一个Bug 以及解决方案

posted @ 2026-04-07 14:14  Hey,Coder!  阅读(1)  评论(0)    收藏  举报