将JSON反序列化为C#对象列表

时间:2019-10-20 20:24:48

标签: c# json firebase unity3d json.net

我正在开发一个利用Firebase的手机游戏项目。我已经设法获得登录/注册,并且发送项目到数据库可以正常工作。但是,经过无数小时将我的头撞在墙上的事情之后,我还是无法正常工作。我可以从数据库中获取正确的JSON数据,它以以下格式显示:

{"5449000085757":{"itemLevel":82,"itemName":"Sword of Maximum Epicness","itemType":""},"6419800152996":{"itemLevel":45,"itemName":"Your Average Sword","itemType":""}}

这些当然都是出于测试目的的字段。我想做的是创建一个对象列表,其中列表是“库存”,而对象是物品。我已经尝试过使用Json.NET,Unity的内置JSON实用程序和各种技术,但找不到方法。我感到有点愚蠢,因为显然这不会那么困难。无论我尝试过哪个示例,它都不起作用。

如果可能的话,有人可以提供一种简单的方法来简要介绍如何从JSON创建对象列表吗?我只是无法自己解决这个问题,而且真的很令人沮丧。

3 个答案:

答案 0 :(得分:2)

如果您希望使用JSON混合一个强类型的类,则可以执行以下操作:

  1. 将JSON有效负载复制到剪贴板中。
  2. 在Visual Studio中,将新类添加到您的项目中。从“编辑”菜单中,选择“选择性粘贴/ JSON粘贴为类”。这将创建代表您的JSON类的一个或多个类。
  3. 打开工具/管理解决方案的NuGet软件包。将NewtonSoft.JSON库添加到您的项目中。
  4. 要从JSON中混合对象,请使用以下内容:

    MyObject myObject = JsonConvert.DeserializeObject(jsonPayload);

答案 1 :(得分:1)

我首先要下载Newtonsoft.Json NuGet软件包。确保使用using Newtonsoft.Json将其导入您的班级。

然后,我将创建一个Item类:

public class Item
{
    [JsonProperty("itemLevel")]
    public long ItemLevel { get; set; }

    [JsonProperty("itemName")]
    public string ItemName { get; set; }

    [JsonProperty("itemType")]
    public string ItemType { get; set; }
}

然后,您可以使用JsonConvert.DeserializeObject简单地将JSON反序列化为Dictionary<string, Item>

var deserializedJson = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);

测试

var json = "{\"5449000085757\":{\"itemLevel\":82,\"itemName\":\"Sword of Maximum Epicness\",\"itemType\":\"\"},\"6419800152996\":{\"itemLevel\":45,\"itemName\":\"Your Average Sword\",\"itemType\":\"\"}}";

var deserializedJson = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);

foreach (var entry in deserializedJson)
{
    Console.WriteLine($"Key={entry.Key}, itemLevel={entry.Value.ItemLevel}, itemName={entry.Value.ItemName}, itemType={entry.Value.ItemType}");
}

输出

Key=5449000085757, itemLevel=82, itemName=Sword of Maximum Epicness, itemType=
Key=6419800152996, itemLevel=45, itemName=Your Average Sword, itemType=

答案 2 :(得分:0)

最好的办法是将其反序列化为Dictionary<string, object>并遍历值并将其强制转换为所需的“ Item”类。