无法从反序列化的数据中检索键和值信息


                dynamic data = JsonConvert.DeserializeObject(result);
                foreach (var field in data)
                {
                    var deserializedData = new DeserializedData
                    {
                        Label = field.Key.ToObject<string>(),
                        Content = field.Value.ToObject<string>()
                    };
                }

注意:data={"name":"test"}错误:"Newtonsoft.Json.Linq.JProperty"不包含"Key"的定义

我想我理解问题所在,但我不确定是否有实现这种行为的方法,或者是否有不同的方法来处理这样的动态关键价值场景。密钥会更改,所以我不知道它是名字、电话、电子邮件还是其他字段。。。

为了将返回的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最终调用基类JToken中的IEnumerable<JToken>迭代器。也就是说,以下也起作用:

    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的强类型版本,因为在编译时可以进行更多的检查。

根据文档,JProperty的值包含键,JProperty's children是值。源

相关内容

  • 没有找到相关文章

最新更新