开发者

Deserializing JSON responses which contain attributes that conflict with keywords

开发者 https://www.devze.com 2023-02-03 16:58 出处:网络
There is an API which I don\'t control, but whose output I need to consume with C#, preferably using JSON.Net.

There is an API which I don't control, but whose output I need to consume with C#, preferably using JSON.Net.

Here's an example response:

[
    {
        "media_id": 36867, 
        "explicit": 0
    }
]

I had planned to have a class like so:

class Media {
    public int media_id;
    public int explicit;
}

And to deserialize:

var l = JsonConvert.DeserializeObject<List<Media>>(s);

Unfortunately, "explicit" is a C# keyword, so this can't compile.

My next guess is to modify the class:

class Media {
    public int media_id;
    public int explicit_;
}

... and somehow map the 开发者_如何学JAVAresponse attributes to the C# attributes.

How should I do that, or am I totally going at this the wrong way?

Failing that, I'd be OK to just plain ignore the "explicit" in the response, if there's a way to do that?


Haven't used JSON.Net, but judging by the docs here, I figure you just need to do what you'd do with XmlSerialization: Add an attribute to tell how the JSON property should be called:

class Media {
    [JsonProperty("media_id")]
    public int MediaId;
    [JsonProperty("explicit")]
    public int Explicit;
}


C# lets you define members with reserved word names (for interoperability cases exactly like this) by escaping them with an @, e.g.,

class Media {
    public int media_id;
    public int @explicit;
}

Not sure how this plays with JSON.Net, but I would imagine it should work (since the @ is an escape and not actually part of the field name).


The following code worked for me.

class JsonRpc {
  public string id;
  public string method;
  public string[] @params;
}
JsonConvert.DeserializeObject<JsonRpc> (data)

Thanks everyone

0

精彩评论

暂无评论...
验证码 换一张
取 消