动态访问属性名为' object'

时间:2016-12-21 03:08:07

标签: c#

如何设置/获取属性' object'一个动态对象?

dynamic json = new ExpandoObject();

json.foo = "bar"; // OK
json.object = "content"; // Does not compile
json["object"] = "content"; // throw RuntimeBinderException
((IDictionary<string, object>)json)["object"] = "content"; // OK, but ...

我正在尝试访问REST API,这需要我设置一个名为&#39; object&#39;的属性。最后一个解决方案实际上解决了问题,但我觉得我错过了一些东西。

1 个答案:

答案 0 :(得分:2)

object是C#关键字 为了定义object属性,您可以告诉编译器“对象”在这种情况下是属性名称,而不是使用“@”的关键字:

json.@object = "content";

适用于所有关键字:json.@foreachjson.@ifjson.@var等。

但是,强烈建议尽量减少其使用,因为它会降低可读性。如果您想在输出JSON中使用object属性,则可以定义序列化类,并使用JsonPropertyAttribute告诉序列化程序将其序列化为object

public class SomeClass
{
    [JsonProperty("object")]
    public string ObjectContent { get;set; }
}

将导致

{
  "object": "content"
}