动态json返回";“长”;作为对象属性

本文关键字:属性 对象 json 返回 quot 动态 | 更新日期: 2023-09-27 17:58:32

我编写了一段代码来获取一个Web服务,该服务在C#中以JSON形式返回outlet,当捕获输出时,我将其转换为动态数据类型,然后在代码中编写一些

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(),但它也不起作用,并给出错误。知道我怎么才能进入那处房产吗。很难从源代码中更改变量名。

谢谢,

动态json返回";“长”;作为对象属性

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

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

请参阅如何使用C#关键字作为属性名称?

假设您的dynamic对象实际上是Json的JObject。NET,其中一个会起作用:

long l1 = d["long"];
long l2 = d.GetValue("long");
long l3 = d.Value<long>("long");

编辑:或者,正如Romoku所建议的,d.@long。然而,我对此有着复杂的感受,因为@符号并没有被广泛使用或以这种身份为人所知,因此可能会让阅读代码的人感到困惑。如果你可以选择,我会使用更明确的字符串查找,就像上面三个一样。

相关文章: