无法从反序列化数据中检索键和值信息
Cannot retrieve the key and Value info from the deserialized data
dynamic data = JsonConvert.DeserializeObject(result);
foreach (var field in data)
{
var deserializedData = new DeserializedData
{
Label = field.Key.ToObject<string>(),
Content = field.Value.ToObject<string>()
};
}
注:数据={"name":"test"}
错误:'Newtonsoft.Json.Linq.JProperty' 不包含 'Key'
的定义
我想我明白问题出在哪里,但我不确定是否有办法实现这种行为,或者是否有不同的方法来处理像这样的动态键值场景。
密钥将更改,所以我不知道它是名称还是 phone 或电子邮件或其他一些字段...
根据documentation the JProperty's value contains the key, and the JProperty's children are the values. source
为了将返回的 data
的子对象作为 IEnumerable<KeyValuePair<string, JToken>>
进行迭代,您需要将反序列化对象显式声明为 JObject
:
var data = JObject.Parse(result);
foreach (var field in data)
{
var deserializedData = new DeserializedData
{
Label = field.Key,
Content = field.Value.ToObject<string>()
};
}
当您执行 dynamic data = JsonConvert.DeserializeObject(result);
时,foreach
最终调用基 class JToken
中的 IEnumerable<JToken>
迭代器。 IE。以下也适用:
dynamic data = JsonConvert.DeserializeObject(result);
foreach (var field in data)
{
// "field" happens to be of type JProperty
var deserializedData = new DeserializedData
{
Label = field.Name,
Content = field.Value.ToObject<string>()
};
}
尽管我更喜欢使用 JObject
的强类型版本,因为可以在编译时进行更多检查。
dynamic data = JsonConvert.DeserializeObject(result);
foreach (var field in data)
{
var deserializedData = new DeserializedData
{
Label = field.Key.ToObject<string>(),
Content = field.Value.ToObject<string>()
};
}
注:数据={"name":"test"} 错误:'Newtonsoft.Json.Linq.JProperty' 不包含 'Key'
的定义我想我明白问题出在哪里,但我不确定是否有办法实现这种行为,或者是否有不同的方法来处理像这样的动态键值场景。 密钥将更改,所以我不知道它是名称还是 phone 或电子邮件或其他一些字段...
根据documentation the JProperty's value contains the key, and the JProperty's children are the values. source
为了将返回的 data
的子对象作为 IEnumerable<KeyValuePair<string, JToken>>
进行迭代,您需要将反序列化对象显式声明为 JObject
:
var data = JObject.Parse(result);
foreach (var field in data)
{
var deserializedData = new DeserializedData
{
Label = field.Key,
Content = field.Value.ToObject<string>()
};
}
当您执行 dynamic data = JsonConvert.DeserializeObject(result);
时,foreach
最终调用基 class JToken
中的 IEnumerable<JToken>
迭代器。 IE。以下也适用:
dynamic data = JsonConvert.DeserializeObject(result);
foreach (var field in data)
{
// "field" happens to be of type JProperty
var deserializedData = new DeserializedData
{
Label = field.Name,
Content = field.Value.ToObject<string>()
};
}
尽管我更喜欢使用 JObject
的强类型版本,因为可以在编译时进行更多检查。