我如何在其Root是Object类的唯一ID时反序列化JSON结果

问题描述 投票:0回答:1

我目前正在尝试学习使用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,我不知道如何将其映射到对象类中,这样我就可以处理这些数据。 “数据”元素是我真正感兴趣的,但是作为一个初学者,我很茫然。

c# json api asp.net-core deserialization
1个回答
0
投票

由于您只需要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。如有疑问,请随时提问。干杯!

© www.soinside.com 2019 - 2024. All rights reserved.