有一个我无法控制的API,但是我需要使用C#消耗它的输出,最好是使用JSON.Net。
以下是一个示例回复:
[
{
"media_id": 36867,
"explicit": 0
}
]
我曾计划过这样的课程:
class Media {
public int media_id;
public int explicit;
}
反序列化:
var l = JsonConvert.DeserializeObject<List<Media>>(s);
不幸的是,“explicit”是一个C#关键字,因此无法编译。
我的下一个猜测是修改课程:
class Media {
public int media_id;
public int explicit_;
}
...并以某种方式将响应属性映射到C#属性。
我该怎么做,或者我是否完全以错误的方式行事?
如果没有这个,如果有办法,我可以明白忽略回复中的“明确”吗?
答案 0 :(得分:18)
没有使用JSON.Net,但是根据文档here来判断,我认为你只需要做你用XmlSerialization做的事情:添加一个属性来告诉如何调用JSON属性:
class Media {
[JsonProperty("media_id")]
public int MediaId;
[JsonProperty("explicit")]
public int Explicit;
}
答案 1 :(得分:11)
C#允许您通过使用@,例如
转义它们来定义具有保留字名称的成员(对于完全相同的互操作性情况)class Media {
public int media_id;
public int @explicit;
}
不确定这是如何与JSON.Net一起播放的,但我认为它应该有用(因为@是一个转义,实际上并不是字段名称的一部分)。
答案 2 :(得分:1)
以下代码对我有用。
class JsonRpc {
public string id;
public string method;
public string[] @params;
}
JsonConvert.DeserializeObject<JsonRpc> (data)
谢谢大家