我有一个接收此参数的方法:
List<QueueItem> signups
这是课程:
public class QueueItem
{
public string Everything{ get; set; } //all the fields in one string
...
}
所有内容都包含一个字符串,其中包含键值对对象的所有字段,如下所示...
[{
"Key": "Partner",
"Value": "Place"
}, {
"Key": "FIRST_NAME",
"Value": "John"
}, {
"Key": "last_name",
"Value": "Smith"
}]
但是这条线...
var result = signups.Select(x => JsonConvert.DeserializeObject<JObject>(x.Everything));
返回此错误消息:
“无法将类型为'Newtonsoft.Json.Linq.JArray'的对象强制转换为类型为'Newtonsoft.Json.Linq.JObject'”
我见过的解决方案是不强制转换为JObject并将其保留为JArray,但这需要更改检查JObject特定内容(如Properties()等)的其余方法。我希望能够处理将json作为JObject并保留其他所有内容。有有效的方法吗?
因为稍后我会不断检查像这样的JObject特定属性...
var Properties = result.Select(x => x.Properties()).ToArray();
答案 0 :(得分:1)
直接反序列化为List<KeyValuePair<string, string>>
的事情:
var pairs = JsonConvert.DeserializeObject<List<KeyValuePair<string, string>>>(x.Everything);
foreach(var kvp in pairs)
{
Console.WriteLine($"Key: {kvp.Key}");
Console.WriteLine($"Value: {kvp.Value}");
}