unity 3D在调用JsonFx遇到的问题及解决

在unity中传递数据是,Json使用时非常广泛的。

在学习使用Json中遇到了一个小问题,但是这个问题却不容易被发现,所以我把这个问题列出来希望帮助其他初学者。

问题描述:

JsonTypeCoercionException: Only objects with default constructors can be deserialized. (People)
JsonFx.Json.TypeCoercionUtility.InstantiateObject (System.Type objectType, System.Collections.Generic.Dictionary`2& memberMap)
JsonFx.Json.JsonReader.ReadObject (System.Type objectType)
JsonFx.Json.JsonReader.Read (System.Type expectedType, Boolean typeIsHint)
JsonFx.Json.JsonReader.Deserialize (Int32 start, System.Type type)
JsonFx.Json.JsonReader.Deserialize (System.String value, Int32 start, System.Type type)
JsonFx.Json.JsonReader.Deserialize[People] (System.String value)
JsonTest.Start () (at Assets/Scripts/JsonTest.cs:15)

当我使用如下结构的时候,就会报出上面的错误。大意就是在定义People类是没有按照标准去定义。

于是把代码改成后面的:

改成这样后,在json解析时就能够很好的解析出来。

这里两个People应该是使用到了多态的概念,在Json解析时,也是同样按照这种格式来定义的,所以在定义需要转换成Json的时候,要注意类的结构。

THISSKY出品,原文链接:http://www.cnblogs.com/zhuhongjongy/p/4974473.html

时间: 2024-08-11 03:11:41

unity 3D在调用JsonFx遇到的问题及解决的相关文章

Unity 3d C#和Javascript脚本互相调用 解决方案(非原创、整理资料,并经过实践得来)

Unity 3d C#和Javascript脚本互相调用 解决方案 1.背景知识 脚本的编译过程分四步: 1. 编译所有 "Standard Assets", "Pro Standard Assets" or "Plugins" 目录下的代码 2. 编译所有"Standard Assets/Editor", "Pro Standard Assets/Editor" or "Plugins/Edit

Unity 3D 使用TerrainCompose 调用RTP 报错:

Unity 3D:5.2 version TerrainCompose:1.92 version RTP:3.2d version Unity 3D  使用TerrainCompose 调用RTP 报错: Can't access alphamapTexture directly...UnityEngine.Debug:LogError(Object)ReliefTerrain:GetControlMaps() (at Assets/ReliefPack/Scripts/ReliefTerrai

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t

【Unity 3D】学习笔记二十六:unity游戏脚本(六)

在3D游戏世界中,任何一个游戏对象在创建的时候都会附带Transform(变换)组件,并且该组件是无法删除的,也不应该删除.在unity中,Transform面板一共有3个属性: Position  (位置) Rotation(旋转) Scale(缩放) 这三个值都是用来调整游戏对象在游戏界面中的位置,状态等相关参数. Position  (位置) 任何一个游戏对象的三维坐标都保存在Vector3容器中,该容器记录对象在X轴,Y轴,Z轴的坐标.一旦Vector33容器中的坐标发生变化,那么Sce

【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠

碰撞与休眠 上一篇笔记说过,当给予游戏对象刚体这个组件以后,那么这个组件将存在碰撞的可能性.一旦刚体开始运动,那么系统方法便会监视刚体的碰撞状态.一般刚体的碰撞分为三种:进入碰撞,碰撞中,和碰撞结束.关于休眠可以理解成为让游戏对象变成静止状态.如果给某个游戏对象休眠的状态,那么这个物体将立马静止,不再运动. 碰撞 首先学习下碰撞几个重要的方法: OnCollisionEnter(  ):刚体开始接触的时候,立即调用. OnCollisionStay(  ):碰撞过程中,每帧都会调用此方法,直到撞

unity 3D里有两种动态加载机制

unity 3D里有两种动态加载机制: 一是Resources.Load: 一是通过AssetBundle: 其实两者本质上没有什么区别.Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的.其实场景里所有静态的对象也有这么一个加载过程,只是Unity后台替你自动完成了. 1.    AssetBundles是什么? 在一些大型的网络游戏,或者加载比较多的一些场景时,如果要等

Unity 3D:在现有的Android游戏场景中显示AdMob的横幅

关于如何在现有的Android项目现场显示AdMob的横幅,在一个Android项目中使用一个简单的Android JAR文件似乎不是一个简单的事情.我终于设法让AdMob在现有工作统一安卓游戏.对于本例,我使用统一为Windows版本3.5.2和最新的Eclipse为Android插件. 先决条件我假设您有一个工作在你的电脑上安装Android的Eclipse插件.如果没有,请按照本教程准备工作区: https://github.com/unity-plugins/Unity-Admob. E

Unity 3D中不得不说的yield协程与消息传递

1. 协程 在Unity 3D中,我们刚开始写脚本的时候肯定会遇到类似下面这样的需求:每隔3秒发射一个烟花.怪物死亡后20秒再复活之类的.刚开始的时候喜欢把这些东西都塞到Update里面去,就像下面这样写. 1 float nowTime = 3.0f; 2 bool isDead = true; 3 float deadTime = 20.0f; 4 5 void startFireworks() 6 { 7 // 放烟花 8 } 9 10 void revival() 11 { 12 //

【Unity 3D】学习笔记二十七:unity游戏脚本(七)

使用C#编写游戏脚本 在前面提到,unity支持三种语言编写脚本:js,C#,boo.入门的时候建议只用js,因为js比较简单易懂,语法也不是很严格.但后来晋级的时候推荐使用C#,因为它比较符合unity的编程思想,执行效率更高.下面总结下怎么使用C#编写脚本. 继承MonoBehaviour类 在unity中,任何一个脚本,包括上述三种语言都需要去继承MonoBehaviour这个类.为什么我们之前写JS代码的时候没有继承咧?因为在创建JS代码的时候,系统会将其类名与继承关系隐藏起来. 在pr