处理JObject与JArray

时间:2019-02-06 22:12:16

标签: c# json

我有一个接收此参数的方法:

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();

1 个答案:

答案 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}");
}

KeyValuePair documentation