反序列化包含与关键字冲突的属性的JSON响应

Jer*_*nck 11 c# json json.net

有一个我无法控制的API,但我需要使用C#消耗它的输出,最好使用JSON.Net.

这是一个示例响应:

[
    {
        "media_id": 36867, 
        "explicit": 0
    }
]
Run Code Online (Sandbox Code Playgroud)

我曾计划过这样的课程:

class Media {
    public int media_id;
    public int explicit;
}
Run Code Online (Sandbox Code Playgroud)

并反序列化:

var l = JsonConvert.DeserializeObject<List<Media>>(s);
Run Code Online (Sandbox Code Playgroud)

不幸的是,"explicit"是一个C#关键字,因此无法编译.

我的下一个猜测是修改类:

class Media {
    public int media_id;
    public int explicit_;
}
Run Code Online (Sandbox Code Playgroud)

...以某种方式将响应属性映射到C#属性.

我该怎么做,或者我是否完全以错误的方式行事?

如果没有这个,我可以明白忽略响应中的"显式",如果有办法做到这一点?

Rob*_*cke 18

没有使用JSON.Net,但是根据这里的文档判断,我认为你只需要做你用XmlSerialization做的事情:添加一个属性来告诉如何调用JSON属性:

class Media {
    [JsonProperty("media_id")]
    public int MediaId;
    [JsonProperty("explicit")]
    public int Explicit;
}
Run Code Online (Sandbox Code Playgroud)


Eri*_*ger 11

C#允许您通过使用@转义它们来定义具有保留字名称的成员(对于与此类似的互操作性情况),例如,

class Media {
    public int media_id;
    public int @explicit;
}
Run Code Online (Sandbox Code Playgroud)

不知道这是如何与JSON.Net一起播放的,但我认为它应该可以工作(因为@是一个转义,实际上并不是字段名称的一部分).