IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity C#对象合并Json数据中相同属性字段的值,C#对象中的某个属性和json中的同名属性的值合并 -> 正文阅读

[游戏开发]Unity C#对象合并Json数据中相同属性字段的值,C#对象中的某个属性和json中的同名属性的值合并

问题介绍:

两个类型

// 同步数据,包含用户数据

public class SysMessage
{
?? ?public int dti { get; ?set; }
?? ?public UserData playerJMsg { get; ?set; }
}

// 用户数据

public class UserData
{
?? ?public string playerId{ get; set; } //数字ID

?? ?public string email{ get; set; }//邮箱
?? ?public int excution { get; set; }//体力

???????public long gold { get; set; }//游戏币

}

SysMessage类型一般是心跳返回的,而且心跳返回的数据不是完整数据,只会同步某些字段,比如只同步 UserData中的gold.

我在收到服务器的json数据后,都是直接解析成类的

SysMessage?data = JsonMapper.ToObject<SysMessage>(@request.downloadHandler.text);

然而类的解析后 ,一些不需要同步的字段初始化了,也就是会出现?email是null,? excution是0

导致不知道是不是需要同步的字段,我们只需要同步json数据中包含的字段就可以了

解决方法

sys1?是直接收到的json数据转JsonData : JsonMapper.ToObject(@request.downloadHandler.text)["sysMessage"]

这里用的unityWebRequest请求的json数据

?var sys = sys1 as JsonData;
? ? ? ? if (m_user == null) m_user = JsonMapper.ToObject<UserData>(sys["playerJMsg"].ToJson());
? ? ? ? else
? ? ? ? {
?? ??? ??? ?try
?? ??? ??? ?{
?? ??? ??? ??? ?var player = sys["playerJMsg"];
?? ??? ??? ??? ?// 合并user数据
?? ??? ??? ??? ?foreach (var p in m_user.GetType().GetProperties())
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?try
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?if (null != player[p.Name])
?? ??? ??? ??? ??? ??? ?{// 需要同步数据
?? ??? ??? ??? ??? ??? ??? ? p.SetValue(m_user, player[p.Name]);
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?catch
?? ??? ??? ??? ??? ?{
?? ??? ??? ??? ??? ??? ?Console.WriteLine("playerJMsg not found "+ p.Name);
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?catch (FormatException)
?? ??? ??? ?{
?? ??? ??? ??? ?Console.WriteLine("sys not found playerJMsg");
?? ??? ??? ?}
? ? ? ? }

这里使用try catch是因为 jsonData一旦是一个不包含key就马上报错,比如 sys中不包含字段playerMsg,如果直接使用sys["playerMsg"]就会报错,这里是尝试获取我们需要的字段

System.Collections.Generic.KeyNotFoundException: The given key was not present i

这样就做到了,只同步有的数据,防止json直接转class导致的默认值问题,分不清哪些是同步过来的?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:46:08  更:2022-04-24 09:48:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:10:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码