【发布时间】:2018-11-20 13:30:11
【问题描述】:
我有一个 C# 应用程序,可以使用 PowerShell 显示来自 Active Directory 的信息。
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(). -
@SeM 您的重复链接与此案例无关。 OP 在对数组进行脱轨时已经知道并取得了成功。只有当数组包含一个元素时他才会失败
-
@CodeNotFound 我只是想向 OP 展示,如果他有正确的 json 字符串并正确反序列化它,这不太可能发生,因为有 1 个元素或 2 个元素都没有关系。
标签: c# json powershell psobject