Json数据字段类型兼容性处理

今天上班后遇到这样一档子事,web那边要重构,把以前的老接口改造的新接口上。心里想着,改就改呗。然后他说有些字段的类型要改一下。当时我就蒙了,你这改的话,我相关的数据的引用是不是都要跟着改一下。本能的排斥让我想着看着有没有更好的办法去解决这个问题。结果还真有。下面是我的解决方案。

通过继承JsonConverter来解决

我使用的json解析工具是Newtonsoft.该库给我提供了一个JsonConverter让我对字段的解析自定义。比如一些字段我定义的是long类型,json确是字符串类型。这时候我需要定义一个属性兼容类StringToNumberConverter去兼容它。具体的实现方法如下:

cs 复制代码
 public class StringToNumberConverter : JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return objectType == typeof(long)||objectType == typeof(int);
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            switch (reader.TokenType)
            {
                case JsonToken.Integer:
                case JsonToken.Float:
                    return (long)reader.Value;
                case JsonToken.String:
                    return long.Parse(reader.Value.ToString());
                case JsonToken.Null:
                    return null;
                default:
                    throw new JsonSerializationException($"Unexpected token type: {reader.TokenType}");
            }
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            writer.WriteValue(value);
        }
    }

具体使用

我定义了一个类A

cs 复制代码
public class A
{
    public long a;
}

我需要把json {"a","1232456"},转化成这个对象

通过在字段A添加属性[JsonConverter(typeof(NewAPI.NumberToStringConverter))]

cs 复制代码
public class A
{
    [JsonConverter(typeof(NewAPI.StringToNumberConverter))]
    public long a;
}

这样的话,就完美解析。完事儿。

相关推荐
曹牧5 小时前
Oracle数据库中,将JSON字符串转换为多行数据
数据库·oracle·json
捧月华如14 小时前
响应式设计原理与实践:适配多端设备的前端秘籍
前端·前端框架·json
kimi-22217 小时前
如何让大语言模型稳定输出 JSON 的三层防御体系
人工智能·语言模型·json
历程里程碑1 天前
Protobuf vs JSON vs XML:小白该怎么选?
xml·大数据·数据结构·elasticsearch·链表·搜索引擎·json
Java成神之路-3 天前
SpringMVC 响应实战指南:页面、文本、JSON 返回全流程(Spring系列13)
java·spring·json
我命由我123453 天前
在 React 项目中,可以执行 npm start 命令,但是,无法执行 npm build 命令
前端·javascript·vue.js·react.js·前端框架·json·ecmascript
带刺的坐椅3 天前
RFC 9535:JSONPath 的标准化之路
java·json·jsonpath·snack4·rfc9535
孙同学20203 天前
如何将 JSON 数据转换为 Excel 工作表
python·json·excel
ID_180079054733 天前
除了 Python,还有哪些语言可以解析 JSON 数据?
开发语言·python·json
电商API&Tina4 天前
跨境电商如何接入1688官方寻源通接口?附接入流程
java·数据库·python·sql·oracle·json·php