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

相关文章

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数