我编写了一个代码来获取一个Web服务,该服务在C#中将outpot作为JSON返回,当捕获输出时,我将其转换为动态数据类型,然后在我的代码中我写了一些东西
dynamic myobj = FetchFromWeb("some weburl");
string value1 = myobj.property1[0].sub-property.finalvaluething; //This works
string value2 = myobj.property1[0].sub-property.long; //This produce error that long is keyword
上面的最后一个陈述,给出了错误" long"是关键字,不能用作标识符。我的问题是如何获得该值,因为我的Json对象long被用作变量的名称。
我尝试使用myobj.property1[0].sub-property.GetProperty("long").GetValue()
,但它也不起作用并给出错误。知道如何访问该属性。很难从源代码更改变量名称。
感谢,
答案 0 :(得分:2)
您可以使用@
符号来转义关键字。
dynamic data = JObject.Parse("{'long':'value'}");
string longValue = data.@long;
Console.WriteLine(longValue); // value
答案 1 :(得分:1)
假设您的dynamic
对象实际上是来自Json.NET的JObject
,其中一个将起作用:
long l1 = d["long"];
long l2 = d.GetValue("long");
long l3 = d.Value<long>("long");
编辑:或者,正如Romoku建议的那样,d.@long
。然而,由于@
符号不是(AFAIK)广泛使用或以此身份而闻名,因此我对这一点感到复杂,因此可能会使阅读代码的人感到困惑。如果您可以选择,我会使用比上述三个更明确的字符串查找。