动态json回归"长"作为对象属性

时间:2014-04-15 17:49:01

标签: c# json dynamic

我编写了一个代码来获取一个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(),但它也不起作用并给出错误。知道如何访问该属性。很难从源代码更改变量名称。

感谢,

2 个答案:

答案 0 :(得分:2)

您可以使用@符号来转义关键字。

dynamic data = JObject.Parse("{'long':'value'}");
string longValue = data.@long;
Console.WriteLine(longValue); // value

请参阅How do I use a C# keyword as a property name?

答案 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)广泛使用或以此身份而闻名,因此我对这一点感到复杂,因此可能会使阅读代码的人感到困惑。如果您可以选择,我会使用比上述三个更明确的字符串查找。