У меня есть приложение на 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 ».
Как решить эту проблему, чтобы она работала для одного элемента, а также для нескольких?