【问题标题】:Unity accessing JSON ObjectUnity 访问 JSON 对象
【发布时间】:2019-02-26 03:40:22
【问题描述】:

我正在使用 Unity 和 Gamesparks。我得到一个 Gamesparks 对象返回,但我无法使用 C# 访问其中的数据。

private void OnScriptMessage(ScriptMessage message)
    {
        switch (message.ExtCode)
        {
            case "EndTurnMessage":
                {
                    var data = message.Data;
                    string playerID = data.GetString("playerID");

                    print(message.JSONString);

                    break;
                }

print(message.JSONString); 显示

{"@class":".ScriptMessage","data":{"player":{"status":"win","choice":"scissors","newScore":1},"opponent":{"status":"lost","choice":"paper","newScore":0}},"extCode":"roundWonMessage","messageId":"5c74b1a8bcb1b604f0275ed5","notification":true,"playerId":"5c5b5823642c55481643846d","summary":"ScriptMessage"}
UnityEngine.MonoBehaviour:print(Object)

我希望得到 newScore 等,但我对 C# JSON 感到困惑

【问题讨论】:

  • 您使用的是哪个 JSON 库?
  • etc 是什么意思,您只需要一个值还是将 json 完整表示为类?

标签: c# json object unity3d


【解决方案1】:

您的数据如下:

"@class":".ScriptMessage","data":{"player":{"status":"win","choice":"scissors","newScore":1},"opponent":{"status":"lost","choice":"paper","newScore":0}},"extCode":"roundWonMessage","messageId":"5c74b1a8bcb1b604f0275ed5","notification":true,"playerId":"5c5b5823642c55481643846d","summary":"ScriptMessage"}

您需要使用 -> 反序列化它 JsonUtility.FromJsonOverwrite(json, @class);

但要获得那个值,您可能只需要一种解析 JSON 的好方法。在基础 JSON 根节点下是 data、playerId、extCode、messageId、notification、summary。您需要将字段“数据”视为 JSONObject,然后将“玩家”和“对手”视为 JSON 对象。解析其中的值 新分数。

您的数据如下所示:

所以你的代码看起来像这样(这是用作一般准则):

                var data = message.Data;
                string playerID = data.GetString("playerID");
                var _data = data.GetObject("data"); //whatever to get data as JSON or Object
                var _player = _data.GetObject("player"); //whatever to get data as JSON or Object
                var _opponent= _data.GetObject("opponent"); //whatever to get data as JSON or Object
                int _mscorePlayer = _player.GetInteger("newScore"); //Whatever the getter is for JSON Number it could be GetNumber or something comparable.
                int _mscoreOpponent= _opponent.GetInteger("newScore"); //Whatever the getter is for JSON Number it could be GetNumber or something comparable.
                print(message.JSONString);
                print("your playerId:\t" + playerId);
                print("your newScore:\t" + _mscorePlayer);
                print("opponent newScore:\t" + _mscoreOpponent);
                break;

【讨论】:

  • 非常感谢 :-) 只需编辑 var _data = data.GetObject("data");,因为 var data = message.Data; 已被调用
  • 别担心!我以前从未使用过 Gamesparks,但它看起来非常棒,我得去看看。
猜你喜欢
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 2020-08-19
相关资源
最近更新 更多