【问题标题】:How to get data from each KVP如何从每个 KVP 中获取数据
【发布时间】:2019-09-04 13:33:02
【问题描述】:

我已经使用 WWW 将列表从 PHP 导入到 Unity。 WWW.text 包含以下内容:

[
    {
        "playerId": "1",
        "playerLoc": "Pwoods"
    },
    {
        "playerId": "2",
        "playerLoc": "Shelter"
    },
    {
        "playerId": "3",
        "playerLoc": "Cemetery"
    }
]

努力使用 Boomlagoon.JSON,但只使用了 1 个对象。 我发现我需要在这个列表中反序列化它们。 我需要的只是从每个JSON 对象中获取数据。 C# 怎么能做到这一点?

public class player
{
    public string playerId { get; set; }
    public string playerLoc { get; set; }
    public string playerNick { get; set; }
}

仅返回第一个 KeyValuePair。

IDictionary<string, object> players = Json.Deserialize(serviceData) as IDictionary<string, object>;

foreach (KeyValuePair<string, object> kvp in players)
{
    Debug.Log(string.Format("Key = {0}, Value = {1}", kvp.Key, kvp.Value));
}

【问题讨论】:

  • 尝试反序列化为 IEnumerable,例如 List List&lt;player&gt; players = Json.Deserialize&lt;player&gt;(serviceData); 事实上,serviceData 中的每个玩家都将被视为自己的键值对字典,因此每个玩家都将被下一个反序列化的对象覆盖除非你反序列化为一个集合。
  • 我会试试的,伙计。谢谢。
  • @DetectivePikachu 我认为语法是Json.Deserialize&lt;List&lt;player&gt;&gt;(serviceData),因为它是一个列表。此外,对于 OP,只需将它们反序列化为已经提到的列表,完成后,您可以访问每个对象的成员;为什么要把它们放在字典里?

标签: c# json unity3d


【解决方案1】:

假设您的 JSON 看起来像这样 [ { “类型”:“二维码”, “象征”: [ { “序列”:0, "数据": "HelloWorld9887725216", “错误”:空 } ] } ] 为了分析 JSON,让 JSON 模型看起来像这样是有意义的

[System.Serializable]
public class QrCodeResult
{
    public QRCodeData[] result;
}

[System.Serializable]
public class Symbol
{
    public int seq;
    public string data;
    public string error;
}

[System.Serializable]
public class QRCodeData
{
    public string type;
    public Symbol[] symbol;
}

【讨论】:

  • 并不是我一直在寻找的东西,但这种方法效果很好。谢谢,伙计。
【解决方案2】:

播放器类:

public class Player
{
    public string playerId { get; set; }
    public string playerLoc { get; set; }
}

你可以反序列化:

List<Player> players = JsonConvert.DeserializeObject<List<Player>>(data);

【讨论】:

    【解决方案3】:
    List<Player> playerList = new List<Player>();
    
    foreach(Player player in playerArray)
    {
    
    Player playerObject = new Player()
    
    
    playerObject.playerId = player.playerId ;
     playerObject.playerLoc = player.playerLoc;
    layerList.Add(playerObject)
    }
    
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    return serializer.Serialize(playerList);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-09
      • 2016-12-24
      • 1970-01-01
      • 2022-01-16
      • 2021-11-08
      • 2018-11-05
      • 2020-05-05
      • 1970-01-01
      相关资源
      最近更新 更多