Unity3d的5.4版使用JsonUtility.FromJson序列化JSON,多次使用后数据不更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3d的5.4版使用JsonUtility.FromJson序列化JSON,多次使用后数据不更新相关的知识,希望对你有一定的参考价值。

首先,我第一次获取的json是这样的:
json = "books":[],"pagecount":8,"curpage":0,"err":0,"msg":"success"
通过JsonUtility.FromJson<Books>(json); 成功解析。
然后,我再次访问服务器,获取到的json是这样的
json = "books":[],"pagecount":8,"curpage":1,"err":0,"msg":"success"
再次通过JsonUtility.FromJson<Books>(json);来进行解析,这次就不对了,读取出来的curpage 始终还是保持前一次读取的结果 为 0.

后来,我经历N次访问服务器,获取到json:
json = "books":[],"pagecount":8,"curpage":N,"err":0,"msg":"success"
但是使用FromJson解析出来 curpage 始终是 0 。

我跟踪调试的时候看到在进行序列化之前,json文本中的值确实是新获取到的值,而用来存放结果的对象object也是new出来的,里面也不会有旧值,但是为什么FromJson之后,把旧值丢进来了呢?

而在json中,books数组里面的值却可以正确得到。

补充:
我访问服务器提取json是使用 WWW。
WWW w = new WWW(url);
json = w.text;

求教高手,在线等。谢谢。

参考技术A 检查下返回的json的字段的key,和你的类中的属性名是否一致,再检查下该属性的getter setter方法本回答被提问者和网友采纳

Unity -JsonUtility的使用

今天,为大家分享一下unity上的Json序列化,应该一说到这个词语,我们肯定会觉得,这应该是很常用的一个功能点;诚然,我们保存数据的时候,也许会用到json序列化,所以,我们有必要快速了解一下它的简单用法。技术分享【小白篇】
  
     官方文档:https://docs.unity3d.com/Manual/JSONSerialization.html

     1.首先,我们直接新建unity项目,然后新建一个JsonUtilityBehaviour.cs 组件测试类;
        
         技术分享 
        

       JsonUtilityBehaviour.cs 代码如下:

 

 1 using UnityEngine;
 2 using System;
 3  
 4 public class JsonUtilityBehaviour : MonoBehaviour {
 5  
 6     People _p;
 7     string _toJsonStr;
 8     People _fromP;
 9  
10     void OnGUI()
11     {
12          
13         if (GUI.Button(new Rect(100, 100, 100, 50), "Json 序列化"))
14         {
15             NewPeople();
16             _toJsonStr = JsonUtility.ToJson(_p);
17         }
18         GUI.Label(new Rect(100,150,200,50), _toJsonStr);
19         
20         if (GUI.Button(new Rect(100, 200, 100, 50), "Json 解析"))
21         {
22             _fromP = JsonUtility.FromJson<People>(_toJsonStr);
23         }
24         GUI.Label(new Rect(100, 250, 200, 50), GetFromJsonStr());
25     }
26  
27     void NewPeople()
28     {
29         _p = new People();
30         _p.Name = "HappyKing";
31         _p.Age = 18;
32     }
33  
34     string  GetFromJsonStr()
35     {
36         string str = "";
37         if (_fromP != null)
38             str = "我的名字叫" + _fromP.Name + ",今年" + _fromP.Age + "了!";
39         return str;
40     }
41      
42 }
43  
44 [Serializable]
45 public class People
46 {
47     public string Name;
48     public int Age;
49 }

  2.然后,我们可以直接运行编辑器看效果!

       技术分享 

       技术分享 

以上是关于Unity3d的5.4版使用JsonUtility.FromJson序列化JSON,多次使用后数据不更新的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D 学习从简单开始-JsonUtility的使用

Unity -JsonUtility的使用

unity3d5.4c盘满了怎么办

类不会使用统一的 JSONUtility 序列化为 JSON

无法使用 JsonUtility 反序列化数据 [重复]

Unity C# JsonUtility 未序列化列表