我有一个方法,它接收这个参数:
但是这一行...
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,但这需要改变检查 Properties() 等 JObject 特定内容的方法。我希望能够将 json 作为 JObject 处理并保持其他内容不变。是否有一种有效的方法来实现这一点?
因为后面我会经常检查 JObject 特定属性,如下所示...
var Properties = result.Select(x => x.Properties()).ToArray();
JToken.Parse
方法,并根据需要将返回的JToken
强制转换。JToken
是JObject
和JArray
的基类。 - Heretic MonkeyEverything
中的示例。基本上,如果您可以成功执行Deserialize<JObject>(x.Everything)
,那么您可以成功执行JToken.Parse(x.Everything)
并获得类似的结果。 - Heretic Monkey[]
是提示),它应该反序列化为JArray
。由于数组没有任何真正有趣的属性,你可能需要遍历JArray
才能玩得开心。不知道你想用结果做什么,很难回答这个问题。 - Heretic MonkeyJsonConvert.DeserializeObject
,例如传递JsonSerializerSettings
,则可以始终执行JsonConvert.DeserializeObject<JToken>(x.Everything, settings)
。 - dbc