【问题标题】:JObject.Parse key/value with json.net in C#JObject.Parse key/value with json.net in C#
【发布时间】:2016-05-10 11:45:54
【问题描述】:

大家好,我有以下代码:

try {
  foreach (var x1 in JObject.Parse(json1)) {
     string name = x1.Key;
     JToken value = x1.Value;

上面的代码没有明显的错误。但是,一旦我运行应用程序,它就会出错并说:

“Newtonsoft.Json.Linq.JProperty”不包含“Key”的定义

那么这里发生了什么。我的 VB.net 代码像上面那样工作:

Try
    For Each x1 In JObject.Parse(json1)
       Dim name As String = x1.Key
       Dim value As JToken = x1.Value

【问题讨论】:

  • 不知道为什么 VB 会工作,也不知道为什么编译器不会捕获它(除非安装程序使用 dynamic),但我相信您正在寻找的属性是 actually Name

标签: c# json vb.net json.net


【解决方案1】:

JProperty(通过迭代 JObject 获得 JPropertys)继承自 JContainer,后者继承自 JTokenJToken 实现 IDynamicMetaObjectProvider

这使得它本质上是一个dynamic 对象,它允许您在编译时访问它上面的任何内容。这就是为什么您没有收到编译器错误的原因。

在运行时DLR 发现x1 上没有Key 属性并抛出该异常。

如果要获取属性名称,应使用Name 属性。

foreach (var x1 in JObject.Parse(json1)) {
    string name = x1.Name;
    JToken value = x1.Value;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 2022-12-02
    • 2022-12-02
    • 1970-01-01
    • 2022-12-19
    • 2016-06-09
    • 1970-01-01
    • 2018-02-28
    相关资源
    最近更新 更多