你有一个包含短划线的属性名称吗?

Per*_*ury 25 c# json.net

是否可以创建一个包含短划线字符的属性名称的对象?

我正在创建一个匿名对象,以便我可以使用Json.Net将其序列化为Json,并且我需要的其中一个属性包含一个' - '破折号字符.

我想要的一个例子是:

var document =  {
    condtions = new {
        acl = "public-read",
        bucket = "s3-bucketname",
        starts-with = "test/path"
    }
};
Run Code Online (Sandbox Code Playgroud)

我知道我可以在创建对象时用下划线替换短划线,然后在序列化字符串中替换它们,但是想知道在没有这种解决方法的情况下是否有语言方法可以执行此操作.

Mar*_*tos 33

你不能用匿名对象做到这一点; 字段名称必须是有效的标识符.您可以使用字典,Json.Net应该像匿名对象一样容易地序列化:

var document = new {
    conditions = new Dictionary<string, string>() {
        { "acl", "public-read" },
        { "bucket", "s3-bucketname" },
        { "starts-with", "test/path" }
    }
};
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 23

不在c#中,没有.但是,大多数序列化程序允许您自定义此选项 - 通常通过属性.IIRC用JSON.NET你要[JsonProperty("starts-with")]指定名称.但是,您不能在匿名类型上使用属性,因此您可能需要使用所需的属性(和属性)定义一个类.


Fré*_*idi 10

不幸的是,这是不可能的,因为语言无法区分以下两个表达式:

condition.starts-with;    // Read "starts-with" property.
condition.starts - with;  // Read "starts" property and subtract "with" variable.
Run Code Online (Sandbox Code Playgroud)