【问题标题】:Get the name of a JObject in Json.Net在 Json.Net 中获取 JObject 的名称
【发布时间】:2014-07-22 22:15:25
【问题描述】:

我有一个JObject 等于:

"Info":
{
    "View":"A",
    "Product":"B",
    "Offer":"Offer1",
    "Demo":"body {background-color:red;} #box {border:dotted 50px red;}",
    "Log":false
}

如何返回对象的名称“Info”?

我目前正在使用Path 属性,如下所示:

jObject.Name = jObject.Path.Substring(jObject.Path.jObject('.') + 1);

有没有更好的方法来做到这一点?

【问题讨论】:

  • Info 不是数组,而是对象。

标签: c# linq json.net


【解决方案1】:

在 JSON 中,对象本身没有名称。对象只是名称-值对集合的容器,以花括号开头和结尾。因此,您上面所拥有的是更大的 JSON 主体的片段。必须有一个外部对象来包含它。该外部对象有一个名为Info属性,该属性的值就是您所指的对象。

{
    "Info":
    {
        "View":"A",
        "Product":"B",
        "Offer":"Offer1",
        "Demo":"body {background-color:red;} #box {border:dotted 50px red;}",
        "Log":false
    }
}

在 Json.Net 中,JObject 模拟 JSON 对象,JProperty 模拟包含在 JObject 中的名称-值对。每个JObject 都有一个JProperties 的集合,它们是它的孩子,而每个JProperty 都有一个Name 和一个孩子,它的Value

所以,假设你有一个对最里面的JObject 的引用(包含ViewProductOffer 属性),你可以像这样得到它包含JProperty 的名称:

JProperty parentProp = (JProperty)jObject.Parent;
string name = parentProp.Name;  // "Info"

【讨论】:

  • 当我在 VS 中将鼠标悬停在 Parent 上时,它显示为 JContainer。对 JProperty 的演员表有效,只是想知道是否有什么需要注意的?
  • @twelveFunKeys JContainer 是可以包含另一个JToken 的任何JToken,即JArrayJObjectJProperty,但不能包含JValueParent 属性是在基类 JToken 上定义的,因为任何 JToken 都可能有父级,并且根据定义,该父级始终是 JContainerJProperty 的父级始终是 JObjectJObjectJArrayJValue 的父级可以是 JPropertyJArray,但不能是 JObject。所以你确实需要知道如何投射它。如果不知道类型,可以在转换前检查Type属性。
猜你喜欢
  • 1970-01-01
  • 2022-06-27
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
相关资源
最近更新 更多