在 unity3d 中使用 LitJson
Posted
技术标签:
【中文标题】在 unity3d 中使用 LitJson【英文标题】:Using LitJson in unity3d 【发布时间】:2011-03-08 22:29:11 【问题描述】:2 个问题。
1) 在 javascript 中编写脚本时是否可以按原样使用 LitJson 库?这确实是一个关于能够在 javascript 源代码中使用 c# 源代码的普遍问题。
2) 我是 C# 开发新手。我似乎无法启动并运行 LitJson。以下代码抛出此错误:An object reference is required to access non-static member
LitJson.JsonReader.Read()'`
using UnityEngine;
using System.Collections;
public class Loadr : MonoBehaviour
string url= "http://developer.echonest.com/api/v4/artist/images?api_key=N6E4NIOVYMTHNDM8J&id=ARH6W4X1187B99274F&format=json&results=1&start=0&license=unknown";
void Start ()
WWW www = new WWW(url);
print(www.text);
Object a = LitJson.JsonReader.Read(www.text);
print(a.response.status);
有什么想法吗?
【问题讨论】:
【参考方案1】:我已经使用了 Unity3D 中的一堆 Json 库。我发现的唯一一个没有奇怪的序列化/反序列化怪癖,并且在 ios、WebPlayer 和编辑器中始终如一地工作的是JsonFX JsonSerializer 1.4。
也就是说,我认为您的问题是您必须先实例化 JsonReader,然后才能使用它的方法。
这样的事情可能会奏效:
var reader = new LitJson.JsonReader();
Object a = reader.Read(www.text);
编辑:
哎呀,我跳过了你的部分问题。您应该能够使用 UnityScript 中的任何托管程序集,就像使用 C# 一样。您可以使用import
,而不是使用using
包含命名空间。之后代码几乎与 C# 版本相同,除了 UnityScript 定义类型的方式 (var blah : Type = YadaYada();
)
【讨论】:
【参考方案2】:嗯。你试过Jayrock吗?它的代码看起来不错,但没有任何文档可言,作者很满意地保留它。
【讨论】:
【参考方案3】:关于问题
如果要在c#脚本中访问js代码,则应将js代码放在Plugins文件夹中,反之亦然。
Object a = LitJson.JsonReader.Read(www.text);
我认为 JosnReader 不是一个静态类,你应该实例化一个新的 JsonRead 对象,然后你可以访问 Read(string data) mehotd
【讨论】:
【参考方案4】:查看 Unity3D 的 LitJSON 分支:
实际上 LitJson 有一些问题,并不总是按预期工作,所以我创建了一个简单的 JSON-Lib,可以处理所有 Unity3D 类型、枚举和任意类。
在 GitHub 上找到它:Tiny-JSON
你可以很简单地使用它:
// encode
Animal a = new Animal(4);
string json = Json.Encode(a);
// decode
IList<Animal> a = Json.Decode<IList<Animal>>("[\"legs\":4, \"legs\":2]");
【讨论】:
以上是关于在 unity3d 中使用 LitJson的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D日常开发Unity3D中使用数据类保存数据,持久保存数据数据存放在跨场景调用数据类
在Unity3d中使用Google.ProtocolBuffers