powershell - 尝试将 JSON 反序列化为 Powershell 中的类型化对象
问题描述
我正在尝试将 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
但是我又收到了同样的错误
解决方案
您的数据类型有错误。公共类DataTypeList应该只有根据$json有[DataType[]]$DataTypeList。这应该将您的 json 反序列化为自定义 [Root] 类型:
class DataType {
[string]$key;
[string]$dataName;
}
class DataTypeList {
[DataType[]]$DataTypeList;
}
class Event {
[string]$key;
[string]$name;
[string]$localeKey;
[DataType]$DataType;
[Collections.Generic.List[DataTypeList]]$DataTypeList;
}
class Root {
[Collections.Generic.List[Event]]$events;
}
$content = ([System.Web.Script.Serialization.JavaScriptSerializer]::new()).Deserialize($json, [Root])
推荐阅读
- python - “conda update --all”是否足以升级到最新的 anaconda 版本?
- memory - 特定汉明距离的最大误码
- c# - 照片在上传 C# MVC 时损坏
- ios - 无法识别颤振 ios 应用程序中的空值
- javascript - 使用父组件中的方法
- memory - Time required to access the memory locations in the same cache line
- arrays - C 编程:使用指针对数组进行排序的函数
- kubernetes - k8s nodeport 不适用于特定节点
- c++ - 允许用户不仅可以输入多行文本,还可以向上移动和编辑之前输入的行
- function - 函数中的 Powershell 哈希表无法访问