Пожалуйста, посмотрите на эту скрипку: https://dotnetfiddle.net/XpjuL4
Это код:
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
//Below are my classes,
public class UsersInfo
{
public List<UserInfo> UserInfoList { get; set; }
public UsersInfo()
{
UserInfoList = new List<UserInfo>();
}
}
public class UserInfo
{
public string Id { set; get; }
public string Name { set; get; }
public string LastName { set; get; }
public string ProfilePictureUrl { set; get; }
public string SmallUrl { set; get; }
public string ThumbnailUrl { get; set; }
public string Country { set; get; }
public bool IsInvalid { set; get; }
}
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
Option1();
Option2();
}
public static void Option1(){
string json = @"{""UserInfoList"":[
{""id"":""11ef2c75 - 9a6d - 4cef - 8163 - 94daad4f8397"",""name"":""bracing"",""lastName"":""male"",""profilePictureUrl"":null,""smallUrl"":null,""thumbnailUrl"":null,""country"":null,""isInvalid"":false},
{ ""id"":""318c0885-2720-472c-ba9e-1d1e120bcf65"",""name"":""locomotives"",""lastName"":""riddles"",""profilePictureUrl"":null,""smallUrl"":null,""thumbnailUrl"":null,""country"":null,""isInvalid"":false}
]}";
var obj = JsonConvert.DeserializeObject<UsersInfo>(json);
obj.UserInfoList.ForEach(e => Console.WriteLine(e.Id));
}
public static void Option2(){
string json = @"[
{""id"":""11ef2c75 - 9a6d - 4cef - 8163 - 94daad4f8397"",""name"":""bracing"",""lastName"":""male"",""profilePictureUrl"":null,""smallUrl"":null,""thumbnailUrl"":null,""country"":null,""isInvalid"":false},
{ ""id"":""318c0885-2720-472c-ba9e-1d1e120bcf65"",""name"":""locomotives"",""lastName"":""riddles"",""profilePictureUrl"":null,""smallUrl"":null,""thumbnailUrl"":null,""country"":null,""isInvalid"":false}
]";
var obj = JsonConvert.DeserializeObject<List<UserInfo>>(json);
obj.ForEach(e => Console.WriteLine(e.Id));
}
}
Оба работают и в основном очень близки к тому, что вы делаю. Вы можете либо сериализовать его как список (на основе вашего json, я думаю, что это самый близкий к вашему варианту использования, и это вариант 2).
Однако обратите особое внимание на JSON. Мне пришлось повторно проанализировать ваш JSON, чтобы он заработал (https://jsonformatter.org/json-parser - хороший сайт для этого). Для пояснения примера в C#, @
означает необработанную строку, а в необработанной строке кавычки экранируются двойными кавычками ""
.
Я ожидал, что бизнес-лог c создание этого JSON неверно, если JSON, который вы вставили, является прямым результатом этого.
EDIT Учитывая комментарий OP:
Спасибо Tu.ma за мысли. Другой метод возвращает IEnumerable, который представляет собой не что иное, как Dictionary.Where (x => x.Value == null) .Select (x => x.Key) .ToHashSet (). Значения в словаре: -> Key - String, Value - сериализованный объект UserInfo. Итак, в таком случае я должен десериализовать одну за другой? Если нет, я должен сериализовать весь список одним выстрелом? Я прав? - Raj 12 часов go
Проблема в способе создания списка UsersInfo. Результатом Dictionary<string,string>.Where(x => x.Value == null).Select(x =>
x.Key).ToHashSet()
является набор строк, а не объектов, поэтому вам нужно сериализовать их одну за другой.
Если вас беспокоит линейность подхода, вы могли бы считать через него параллельно . Конечно, вам нужно оценить, подходит ли он для вашего приложения.
var userInfoStrings = Dictionary<string,string>.Where(x => x.Value == null).Select(x => x.Key).ToHashSet();
var UserInfoList = userInfoStrings.AsParallel().Select (u => JsonConvert.DeserializeObject<UsersInfo>(u)).ToList();