C# JSON 反序列化返回 null



我正在尝试从valve的API中反序列化JSON格式的一些统计信息。下面的代码在反序列化时不会引发任何异常,只会在之后尝试使用统计信息时引发。反序列化后,所有统计信息都没有值。Valve 的响应如下所示:

"playerstats":{ 
"steamID":"",
"gameName":"",
"stats":[ 
{ 
"name":"deaths",
"value":5062
}, etc etc..

这是我的 Rust 类(Rust 是我从中获取统计数据的游戏(。

public class Rust
{
public int steamID { get; set; }
public string gameName { get; set; }
public Array stats { get; set; }
}

这是反序列化代码:

Rust getStats = JsonConvert.DeserializeObject<Rust>(str);
foreach (var stat in getStats.stats) //< ----- Exception: Object reference not set to an instance of an object.
{
parsed += stat.ToString();
}

然后返回"parsed"并用于打印出所有统计信息,"str"是来自Valve的json响应。我将整个 JSON 响应粘贴到 pastebin 上,以防上述数据不够:https://pastebin.com/uJZSTF3G

我尝试在 Rust 类中单独命名一些统计信息,而不是使用 Array。

我希望输出显示所有反序列化的统计信息,例如在控制台中。

正如@Bagus Tesa建议的那样,尝试类似...

public class Rust
{
public int steamID { get; set; }
public string gameName { get; set; }
public List<RustStat> stats { get; set; }
}
public class RustStat
{
public string name { get; set; }
public string value { get; set; }
}

编辑

我将 steamID 属性更改为字符串,并在下面添加了完整的代码。 这为我成功编译。 希望这有帮助!

public class Valve
{
public Rust playerstats { get; set; }
}
public class Rust
{
public string steamID { get; set; }
public string gameName { get; set; }
public List<RustStat> stats { get; set; }
}
public class RustStat
{
public string name { get; set; }
public string value { get; set; }
}
Valve valve = JsonConvert.DeserializeObject<Valve>(str);
foreach (RustStat stat in valve.playerstats.stats)
{
}

最新更新