【问题标题】:JSON Array to Array List using c#JSON数组到数组列表使用c#
【发布时间】:2018-12-10 10:33:51
【问题描述】:

我正在尝试将 JSON 转换为列表,请任何人帮助我。

public class User
{
    public String id { get; set; }
    public String imageURL { get; set; }
    public String search { get; set; }
    public String status { get; set; }
    public String username { get; set; }
}



List<User> users = JsonConvert.DeserializeObject<List<User>>(resp.Body);

JSON
{
    "KfWE8S9jWJdWnAZEbOtHTtisNwO2":
        {"id":"KfWE8S9jWJdWnAZEbOtHTtisNwO2"
        ,"imageURL":"https://firebasestorage.googleapis.com/v0/b/bchat-af5e5.appspot.com/o/uploads%2F1542785437375.jpg?alt=media&token=be1ce806-fecf-4081-9dad-f0a20e5d8489"
        ,"search":"rene vizconde"
        ,"status":"online"
        ,"username":"Rene Vizconde"},
    "ScpDnyQCyKemXSgdo3jEvZFNxY83":
        {"id":"ScpDnyQCyKemXSgdo3jEvZFNxY83"
        ,"imageURL":"default"
        ,"search":"yeli potpot"
        ,"status":"offline"
        ,"username":"Yeli Potpot"},
    "cnPYOdHYWaaLDQmchELLvw85DBf1":
        {"id":"cnPYOdHYWaaLDQmchELLvw85DBf1"
        ,"imageURL":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSHilM1ke9pZePBJTobMTcktggiw-UywdqAIpf-VX9nqecKl6b4wQ"
        ,"search":"bards disc"
        ,"status":"offline"
        ,"username":"Bards Disc"},
    "tWTbllTxaVM9WQnsNwnBgc3ixLM2":
        {"id":"tWTbllTxaVM9WQnsNwnBgc3ixLM2"
        ,"imageURL":"default"
        ,"search":"renz angelo"
        ,"status":"offline"
        ,"username":"Renz Angelo"}
    }

【问题讨论】:

  • 我的回答有什么问题,您只是未选中勾选。让我知道。

标签: c# json firebase json.net


【解决方案1】:

您可以简单地将您的 json 反序列化为 Dictionary&lt;string, User&gt; 而不是 List&lt;User&gt;

class Program
{
    static void Main(string[] args)
    {
        var data = JsonConvert.DeserializeObject<Dictionary<string, User>>(resp.Body);

        foreach (var item in data)
        {
            User user = item.Value;

            Console.WriteLine("id: " + user.id);
            Console.WriteLine("imageURL: " + user.imageURL);
            Console.WriteLine("search: " + user.search);
            Console.WriteLine("status: " + user.status);
            Console.WriteLine("username: " + user.username);
            Console.WriteLine();
        }

        Console.ReadLine();
    }
}

输出:

【讨论】:

    【解决方案2】:

    您的 JSON 有问题。尽管它的结构“在语法上”是正确的,但它的设计却很糟糕。

    您使用 ID 命名 JSON 的成员,然后在这些成员的每个对象中引用该 ID。

    不要重复自己。

    由于成员的名称是动态的,因此您不能使用该根对象来反序列化 JSON。 (这不是 List&lt;User&gt;,该 JSON 中没有列表,而是对象)

    考虑使用这种结构而不是(注意括号来创建对象数组)

    [
        {
            "id":"KfWE8S9jWJdWnAZEbOtHTtisNwO2"
            ,"imageURL":"https://firebasestorage.googleapis.com/v0/b/bchat-af5e5.appspot.com/o/uploads%2F1542785437375.jpg?alt=media&token=be1ce806-fecf-4081-9dad-f0a20e5d8489"
            ,"search":"rene vizconde"
            ,"status":"online"
            ,"username":"Rene Vizconde"
        },
        {
            "id":"ScpDnyQCyKemXSgdo3jEvZFNxY83"
            ,"imageURL":"default"
            ,"search":"yeli potpot"
            ,"status":"offline"
            ,"username":"Yeli Potpot"
        },
        {
            "id":"cnPYOdHYWaaLDQmchELLvw85DBf1"
            ,"imageURL":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSHilM1ke9pZePBJTobMTcktggiw-UywdqAIpf-VX9nqecKl6b4wQ"
            ,"search":"bards disc"
            ,"status":"offline"
            ,"username":"Bards Disc"
        },
        {
            "id":"tWTbllTxaVM9WQnsNwnBgc3ixLM2"
            ,"imageURL":"default"
            ,"search":"renz angelo"
            ,"status":"offline"
            ,"username":"Renz Angelo"
        }
    ]
    

    【讨论】:

    • 一旦您知道此数据结构来自 Firebase 实时数据库(一个存储 JSON 数据的 NoSQL 数据库),使用 ID 作为键是很正常的。键是用户 ID,将它们用作键可以让您通过 ID 有效地查找用户。从这个意义上说,它与关系数据库中的主键非常相似。在您提议的结构中,您必须扫描整个阵列,在 Firebase 的情况下,阵列位于服务器上。在原始 JSON 结构中,您可以根据用户 id 进行直接查找。
    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 2023-01-14
    • 2014-12-28
    • 2014-03-27
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多