【问题标题】:Newtonsoft.Json.Linq.JObject contains keys starting with "@"Newtonsoft.Json.Linq.JObject 包含以“@”开头的键
【发布时间】:2014-01-08 07:30:06
【问题描述】:

我必须在 .net 中解析从 Lotus Domino REST API 返回的 JSON。 我用

dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(myString);

数据对象为Newtonsoft.Json.Linq.Jobject

[
 {
    "@href":"http://domsrv.webdev.local:80/dbname.nsf/api/data/collections/name/.LkpCust/unid/6F4F9DE95F81A696C12572F3003BBC52",
    "@link":
    {
      "rel":"document",
      "href":"http://domsrv.webdev.local:80/dbname.nsf/api/data/documents/unid/6F4F9DE95F81A696C12572F3003BBC52"
    },
    "@entryid":"10-6F4F9DE95F81A696C12572F3003BBC52",
    "@unid":"6F4F9DE95F81A696C12572F3003BBC52",
    "@noteid":"12ED2",
    "@position":"10",
    "@siblings":60613,
    "@form":".CompanyProfile",
    "CompanyName":"ACME Inc."
 }
]

这肯定是一个愚蠢的问题,但除了 data.CompanyName 之外,我找不到从数据对象中获取任何值的方法。

data.CompanyName 返回“ACME Inc.”

虽然我不知道如何获取 @unid、@noteid、@position 或任何其他键以“@”字符开头的项目的值

【问题讨论】:

    标签: .net json linq rest lotus-domino


    【解决方案1】:

    好的,YASADQ(又一个自答的愚蠢问题)...

    如果再想一想,也许我会避免发布这个问题。

    而不是做

    data[i].@unid
    

    这给了 null 因为@ char 是无法识别的东西,我这样做了

    Newtonsoft.Json.Linq.JObject myObj = data[i];
    string myVal = myObj.Property("@unid").ToString();
    

    完成

    【讨论】:

      【解决方案2】:

      很高兴看到您已经找到了 .net 的解决方案。 FWIW,您在用 JavaScript 解析数据服务响应时使用了类似的模式。

      而不是这个:

      var myVal = myObj.@unid;
      

      你必须这样做:

      var myVal = myObj['@unid'];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 2019-10-15
        • 2017-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多