我目前正在尝试学习使用C#.net core 3和Newtonsoft与API系统一起工作。
以下对Steam API的调用是我正在使用的有关特定游戏的详细信息。例如http://store.steampowered.com/api/appdetails?appids=72850
这将返回与此类似的JSON(为简单起见,我将其缩减了)
{
"72850": {
"success": true,
"data": {
"type": "game",
"name": "The Elder Scrolls V: Skyrim",
"steam_appid": 72850,
"required_age": 0,
"is_free": false
}
}
}
每个返回都有唯一的ID作为根,在这种情况下是72850,我不知道如何将其映射到对象类中,这样我就可以处理这些数据。 “数据”元素是我真正感兴趣的,但是作为一个初学者,我很茫然。
由于您只需要json中的“ Data”元素,因此使用Newtonsoft相当简单。首先创建一个包含Data元素包含的所有字段的类,如下所示:
public class Data
{
public string Type { get; set; }
public string Name { get; set; }
public long Steam_AppId { get; set; }
public int Required_Age { get; set; }
public bool Is_Free { get; set; }
}
现在为了映射必须在字符串中存储的json响应,您必须对其进行反序列化以映射到C#类。您可以很容易地做到这一点:
//You already have this but I created it in order to test
string jsonResult = "{ \"72850\": " +
"{ \"success\": true, \"data\": " +
"{ \"type\": \"game\", \"name\": \"The Elder Scrolls V: Skyrim\", " +
"\"steam_appid\": 72850, \"required_age\": 0, \"is_free\": false } }";
//getting the value portion of data element/key
string jsonData = "{" + jsonResult.Substring(jsonResult.IndexOf("\"type"));
//removing the extra } from the end
jsonData = jsonData.TrimEnd('}');
//map the json string to a C# object
var dataObj = JsonConvert.DeserializeObject<Data>(jsonData);
所以现在您将看到映射到您的Data对象的json值,在本例中为dataObj。如有疑问,请随时提问。干杯!