【问题标题】:Unity : Assign json to List [duplicate]Unity:将json分配给列表[重复]
【发布时间】:2017-06-29 12:33:52
【问题描述】:

JSON 下面是WWW GET 结果

{
    "status":200,
    "watchlist":[
        {
            "Category":"Movie",
            "ShowList":[
                {
                    "id":"59534a851339762f38e16ad7",
                    "Name":"Play zombie tonight",
                    "Description":"descblablabla",
                    "IMDB":1,
                    "Tag":[
                        "horror",
                        "comedy"
                    ],
                    "Picture":{
                        "id":"59534a8b1339762f38e16b6d",
                        "Url":"imgurlbla",
                        "DisplayOrder":0
                    }
                }
            ]
        },
        {
            "Category":"Variety",
            "ShowList":[
                {
                    "id":"59532bf51339742f380d4cb1",
                    "Name":"Yearning for life",
                    "Description":"descblablabla",
                    "IMDB":1,
                    "Tag":[
                        "reality show"
                    ],
                    "Picture":{
                        "id":"59532bfb1339742f380d4d3a",
                        "Url":"imgurlbla",
                        "DisplayOrder":0
                    }
                }
            ]
        }
    ]
}

我想将结果分配给List<>,所以我可以轻松访问WatchList 中的值。下面是我试过的代码。

List<WatchList> viewitemlist = JsonUtility.ToJson (www.text);

我也尝试过一个名为 LitJSON 的库:

string json = www.text;
JsonData jsonObject = JsonMapper.ToObject(json);
List<On360WatchList> viewitemlist = 
JsonMapper.ToObject<List<On360WatchList>> (jsonObject ["watchlist"].ToJson());

【问题讨论】:

  • 顺便说一句,这甚至不是 Json 数组。粘贴您的代码here,您将获得正确的 json 数据。 RootObject viewObj = JsonUtility.ToJson (www.text);
  • @Programmer 我需要使用您在上一个问题中回答的示例?看到我找不到List&lt;&gt; 的任何例子
  • json 甚至不是列表或数组。你读过我的第一条评论吗?请阅读。
  • 我尝试RootObject viewObj = JsonUtility.ToJson (www.text);,并将此错误Cannot implicitly convert type string' 发送到RootObject'
  • 阅读重复的问题不会有什么坏处。它显示了如何做到这一点。顺便说一句,我的第一条评论是一个错字。那应该是RootObject viewObj = JsonUtility.FromJson&lt;RootObject&gt;(www.text)。现在,如果您有更多问题,请阅读 4.TROUBLESHOOTING JsonUtility:

标签: c# json unity3d litjson


【解决方案1】:

这意味着你想将GET的Result对象反序列化为自己的类型所以,你需要使用Newtonsoft Library来帮助你反序列化这个对象。 要在包管理器控制台中获取库,请编写以下命令

安装包 Newtonsoft.Json

或者轻松地从 NuGet 包管理器下载它。 然后使用下面的代码反序列化你已经拥有的对象

string TargetObject = YourObject; 
List<WatchList> Wl = JsonConvert.DeserializeObject<List<WatchList>>(TargetObject);

尝试将其添加到 Unity 中:

创建一个文件夹:Assets/Plugins 放置 *.dll 文件并将其添加为参考。

要添加引用,请在 Visual Studio 的解决方案资源管理器中突出显示分析器,然后在“项目”>“添加引用”下,您可以通过浏览找到位于 Assets/Plugin 中的 *.dll 文件。

或者 试试这个命令

安装包 Unity.Newtonsoft.Json -Version 7.0.0

Unity.Newtonsoft | NuGut

【讨论】:

  • Unity 可以安装 Newtonsoft.JSON 吗??
  • @ImHappy 我编辑了答案,查看并告诉我你得到了什么
【解决方案2】:

我在 Unity 中解析 JSON 数组时遇到了类似的问题,您无法使用 JsonUtility 解析 JSON 数组,您必须使用外部库,SimpleJSON 为我工作,只需将 .cs 文件粘贴到您的脚本文件夹中。您可以从这里SimpleJSON 下载 JSON 库。向下滚动到 SimpleJSON.cs 部分,将所有内容复制到脚本文件夹中的新 .cs 文件并使用 using SimpleJSON; var jsonObject = JSON.Parse(response) 解析响应,一切顺利!您可以将其作为数组访问或将其分配给关注列表。

【讨论】:

  • 必须using SimpleJSON; >
  • 是的!对不起,我错过了!
  • 抱歉,您不必为 json 数组使用外部库。
  • 我很抱歉,但正如在重复的帖子中提到的那样,它说统一没有内置类来反序列化 Jason 数组,但需要您编写已经提到的自己的类,我的解释是正确的,为简单起见,我建议使用单独的库。你能解释一下@Programmer 的否决票
  • 1.您的答案集中在 Json 数组上,但问题中的 json 甚至不是 Json 数组。粘贴here 进行验证。 2.你不需要像SimpleJSON这样的外部库。您可以在JsonUtility 之上创建一个简单的函数来支持 json 数组。 3.回答重复。
猜你喜欢
  • 2018-11-05
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多