Я пытаюсь преобразовать 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"}
}





Что-то не так с вашим JSON. Хотя его структура «синтаксически» верна, она была плохо спроектирована.
Вы называете член JSON с помощью идентификаторов, а затем ссылаетесь на этот идентификатор в каждом объекте этих членов.
Не повторяйся.
Поскольку имена членов являются динамическими, вы не можете использовать этот корневой объект для десериализации JSON. (это НЕ List<User>, в этом 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 Realtime, базы данных NoSQL, в которой хранятся данные JSON. Ключи - это идентификаторы пользователей, и их использование в качестве ключей позволяет вам эффективно искать пользователя по его идентификатору. В этом смысле он очень похож на первичный ключ в реляционных базах данных. В предлагаемой вами структуре вам придется сканировать весь массив, который в случае Firebase находится на сервере. В исходной структуре JSON вы можете выполнить прямой поиск на основе идентификатора пользователя.
Вы можете просто десериализовать свой json в Dictionary<string, User> вместо List<User>.
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();
}
}
Вывод:
Что-то не так с моим ответом, что вы просто сняли галочку. дай мне знать.