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



我必须在.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."
 }
]

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

数据。公司名称返回"ACME Inc."。

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

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

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

而不是做

data[i].@unid

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

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

很高兴

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

取而代之的是:

var myVal = myObj.@unid;

你必须这样做:

var myVal = myObj['@unid'];

最新更新