【发布时间】:2021-11-05 02:49:22
【问题描述】:
我正在尝试将 JSON 字符串(来自 API 响应)反序列化为我在 Powershell 中键入的对象,但是,我不断收到两种类型的错误。
我有两个 PowerShell 类,例如:
cpublic class DataType
{
[string] key
[string] dataName
}
public class DataTypeList
{
[string] key
[string] name
[string] localeKey
}
public class Event
{
[string] key
[string] name
[string] localeKey
[DataType] DataType
[List[DataTypeList]] DataTypeList
}
public class Root
{
[List[Event]] $events
}
我的 JSON 响应如下所示:
{
"Events":[
{
"key":"1234",
"name":"Bob Muprhy",
"localeKey":"4",
"DataType":{
"key":"1111111",
"dataName":"Name One"
},
"DataTypeList":[
{
"key":"983984",
"name":"New name",
"localeKey":"34985"
},
{
"key":"124543534",
"name":"New name new Name",
"localeKey":"asdfsadf"
}
]
},
{
"key":"123456567",
"name":"Pete big",
"localeKey":"4",
"DataType":{
"key":"1111111",
"dataName":"Name 1"
},
"DataTypeList":[
{
"key":"983984",
"name":"New name",
"localeKey":"34985"
},
{
"key":"124543534",
"name":"New name new Name",
"localeKey":"asdfsadf"
}
]
}
]
}
我的代码目前看起来像这样,我正在使用 Invoke-RestMethod,因为我读到它会自动将 ConvertFrom-JSON 应用于 API 响应/内容
这里我得到了 json 响应:
$json = Invoke-RestMethod -Uri "<API Link>"
在这里,我尝试使用 Cast-Initialization 技术“将 JSON 反序列化到我的对象中”
$response = [Root]($json)
但是我会得到一个错误响应:无法创建“根”类型的对象。无法将类型“System.Object[]”的“System.Object[]”值转换为类型“System.Collections.Generic.List`1[FeaturedEvent]
我也尝试过这样做:
$response = [Root]($json.Events)
但是,这也会返回错误无法将“System.Object[]”类型的“System.Object[]”值转换为“Root”类型
在 C# 中反序列化某些东西时,我知道我可以做类似的事情
*JsonConvert.DeserializeObject<Root>(json);*
尝试在 Powershell 中复制相同的内容
我也试过这个:
$root = [Root]::new()
$root.Events = $json.Events
但是我又收到了同样的错误
【问题讨论】:
-
也许 JSON 响应有 additional 属性超出了
[Event]类定义的属性? -
抱歉忘记在其中提及它们 - 有,但我也为它们创建了额外的类 - 现在会更新
-
@Adam 你能不能也测试一下this 是否有帮助。
-
尝试得到错误“找不到“反序列化”的重载和参数计数:“2””
标签: powershell