我必须在.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'];