【问题标题】:JSON.NET: Obtain JObject from JProperty ValueJSON.NET:从 JProperty 值获取 JObject
【发布时间】:2016-07-05 15:14:28
【问题描述】:

我被困在某事上:

我使用 JObject.Load 反序列化了一个 JSON 文件:

// get the JSON into an object 
JObject jsonObject = JObject.Load(new
  JsonTextReader(new StreamReader("mydoc.json")));

很好。我现在有一个填充 jsonObject。

现在我像这样遍历它的属性:

foreach (JProperty jsonRootProperty in jsonObject.Properties())
  {    
    if (jsonRootProperty.Name=="Hotel")
    {
      ... !!! I just want a JObject here...
    }
  }

一旦找到名称等于“Hotel”的属性,我希望该属性的值作为 JObject。问题是 Hotel 属性名称可能是单个值(例如字符串),也可能是 JSON 对象或 JSON 数组。

如何将属性的值放入 JObject 变量中,以便将其传递给另一个接受 JObject 参数的函数?

【问题讨论】:

    标签: json.net


    【解决方案1】:

    获取JPropertyValue,这是一个JToken,并查看它的Type。此属性将告诉您令牌是对象、数组、字符串等。如果令牌类型是对象,那么您可以简单地将其转换为 JObject 并将其传递给您的函数。如果令牌类型不是 Object 并且您的函数必须具有 JObject,那么您需要将值包装在 JObject 中以使其工作。

    foreach (JProperty jsonRootProperty in jsonObject.Properties())
    {    
        if (jsonRootProperty.Name=="Hotel")
        {
            JToken value = jsonRootProperty.Value;
            if (value.Type == JTokenType.Object)
            {
                FunctionThatAcceptsJObject((JObject)value);
            }
            else
            {
                FunctionThatAcceptsJObject(new JObject(new JProperty("value", value)));
            }
        }
    }
    

    【讨论】:

    • (题外话,但我非常欣赏你,你对 JSON.NET 的了解,并愿意分享它——谢谢你的回复)。看起来不错,但您能否解释一下“将值包装在 JObject 中”的更多信息?我浪费了很多时间来努力将 JToken 放入 JObject 中,显然我错过了一些关于 JToken 和 JObjects 如何相互关联的信息......
    • this answer 的第一部分可能会对您有所帮助。它讨论了 JToken、JObject 等如何关联。谢谢你的好话。
    • 太棒了!该链接看起来像是附加信息的宝库。沿着你在这里的回答,应该让我走上正确的道路来跨越这些最终的 JSON.NET 障碍!
    猜你喜欢
    • 2012-05-19
    • 2022-06-27
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2012-11-29
    • 2018-09-29
    相关资源
    最近更新 更多