Newtonsoft.Json.Linq.JObject包含以“@”开头的键

时间:2014-01-08 07:30:06

标签: .net json linq rest lotus-domino

我必须解析.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或其中任何键以“@”字符开头的其他项目的值

2 个答案:

答案 0 :(得分:2)

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

考虑一下,我可能会避免发布问题。

而不是做

data[i].@unid

,因为@ char是无法识别的,所以

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

完成

答案 1 :(得分:1)

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

而不是:

var myVal = myObj.@unid;

你必须这样做:

var myVal = myObj['@unid'];