У меня есть приложение на C# для отображения информации из Active Directory с помощью PowerShell.
class userps
{
public string Name { get; set; }
public bool Enabled { get; set; }
}
PSObject[] results = pipeline.Invoke().ToArray();
List<userps> listUserps = new List<userps>();
foreach (PSObject obj in results)
{
lista = JsonConvert.DeserializeObject<List<userps>>(obj.ToString());
}
Если объект возвращает данные как минимум двух элементов, например:
[
{
"Name":"xxx",
"Enabled":true
},
{
"Name":"yyy",
"Enabled":true
}
]
Тогда все в порядке, List.Count = 2. Если, однако, он возвращает один элемент:
[
{
"Name":"xxx",
"Enabled":true
}
]
Тогда List.Count = 0 и возникает исключение:
Newtonsoft.Json.JsonSerializationException: «Невозможно десериализовать текущий объект JSON (например, {"name":"value"}) в тип «System.Collections.Generic.List`1[ConsoleApp1.userps]», поскольку для этого типа требуется массив JSON (например, [1,2,3]) для правильной десериализации.
Чтобы исправить эту ошибку, либо измените JSON на массив JSON (например, [1,2,3]), либо измените десериализованный тип, чтобы он был обычным типом .NET (например, не примитивным типом, таким как целое число, не тип коллекции, такой как массив или список), который можно десериализовать из объекта JSON.
JsonObjectAttribute также можно добавить к типу, чтобы заставить его десериализоваться из объекта JSON.
Путь «Имя», строка 2, позиция 11».
Как мне решить эту проблему, чтобы она работала для одного элемента, а также для нескольких?
obj.ToString()
. - person CodeCaster   schedule 11.06.2018