LitJson-Json字符串转对像时:整型与字符串或字符串转:整型进的类型不一致的处理

2024-01-09 21:52

本文主要是介绍LitJson-Json字符串转对像时:整型与字符串或字符串转:整型进的类型不一致的处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


Json数据格式是大家在游戏开中常量用的一种数据格式,某种程度上可以说是必备的。对unity开发来说,LitJson这个json库应该是被使用最多的json库了。

问题描述

今天说要的其中的这个api: JsonMapper.ToObject(json),这个api应该是大家很常用的了,它的作用是将json string反序列化成一个类对象。
要求一json结构中的字段的类型和类型结构中的对应字段的类型一致,不然后转换就会出错。

如:现在有这样一个情况!

{"age":"18","count":100
}
public class TestClass
{public int age { get; set; }public string count { get; set; }
}

大家可看到,类中字段的类型int与string刚好都是反的。int->string会报错,string->int也有报错。
在这里插入图片描述

但我们希望能兼容这种情况。
其它litjson这个库给我提供了处理文案的,它允许我们自定类型映射处理。
这是这两个方法
在这里插入图片描述
下面我这里只展示反序列化的处理方法,一般也只要这个就ok了。而且只处理string->int 和 int->string的实现,其它的实现用到的情况比较少,如果有需要可以参加扩展.

上代码

只要是app初始时,调用LitJsonUtils.Init()即可

using System;
using LitJson;namespace Main
{public static class LitJsonUtils{// static LitJsonUtils()// {//     RegisterCustomImporters();// }public static void Init(){RegisterCustomImporters();}/// <summary>/// 自定类类型 反序列化/// 反序列化/// json->object/// type1->type2/// </summary>public static void RegisterCustomImporters (){// string -> int (各种整形)JsonMapper.RegisterImporter<string, sbyte>(input =>{if (string.IsNullOrEmpty(input)){return 0;}return Convert.ToSByte(input);});JsonMapper.RegisterImporter<string, byte>(input =>{if (string.IsNullOrEmpty(input)){return 0;}return Convert.ToByte(input);});JsonMapper.RegisterImporter<string, ulong>(input =>{if (string.IsNullOrEmpty(input)){return 0;}return Convert.ToUInt64(input);});JsonMapper.RegisterImporter<string, long>(input =>{if (string.IsNullOrEmpty(input)){return 0;}return Convert.ToInt64(input);});JsonMapper.RegisterImporter<string, short>(input =>{if (string.IsNullOrEmpty(input)){return 0;}return Convert.ToInt16(input);});JsonMapper.RegisterImporter<string, ushort>(input =>{if (string.IsNullOrEmpty(input)){return 0;}return Convert.ToUInt16(input);});JsonMapper.RegisterImporter<string, int>(input =>{if (string.IsNullOrEmpty(input)){return 0;}return Convert.ToInt32(input);});JsonMapper.RegisterImporter<string, uint>(input =>{if (string.IsNullOrEmpty(input)){return 0;}return Convert.ToUInt32(input);});// (各种整形)int -> stringJsonMapper.RegisterImporter<sbyte, string>(input => input.ToString());JsonMapper.RegisterImporter<byte, string>(input => input.ToString());JsonMapper.RegisterImporter<ulong, string>(input => input.ToString());JsonMapper.RegisterImporter<long, string>(input => input.ToString());JsonMapper.RegisterImporter<short, string>(input => input.ToString());JsonMapper.RegisterImporter<ushort, string>(input => input.ToString());JsonMapper.RegisterImporter<int, string>(input => input.ToString());JsonMapper.RegisterImporter<uint, string>(input => input.ToString());}}
}

测试代码

using LitJson;
using Main;
using UnityEngine;public class MyTest : MonoBehaviour
{private void Start(){Test();}static void Test(){LitJsonUtils.Init();string json = "{\"age\":\"18\",\"count\":100}";TestClass myClass = JsonMapper.ToObject<TestClass>(json);Debug.Log(myClass!=null);if (myClass != null){Debug.Log($"age={myClass.age} count = {myClass.age}");}}class TestClass{public int age { get; set; }public string count { get; set; }}}

在这里插入图片描述

各位看官,打赏个1元吧

请添加图片描述

这篇关于LitJson-Json字符串转对像时:整型与字符串或字符串转:整型进的类型不一致的处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/588551

相关文章

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1