DeserializeObject没有填充类,导致NullReferenceException

本文关键字:导致 NullReferenceException 填充 DeserializeObject | 更新日期: 2023-09-27 18:09:44

我从JSON格式的API服务器得到答案。然后我尝试用json.net对它进行反序列化,并调用一些对象。然而,这会导致NullReferenceException。在调试期间,我确实看到在反序列化json字符串时,从_507888780开始的类没有被填充。我希望你们中有人能帮我解决这个问题。

我用来反序列化和调用对象的代码:

string file = "{'"status'":'"ok'",'"meta'":{'"count'":1},'"data'":{'"507888780'":[{'"all'":{'"spotted'":467,'"hits_percents'":83,'"wins'":281,},'"tank_id'":2849},{'"all'":{'"spotted'":224,'"hits_percents'":63,'"wins'":32,},'"tank_id'":9473}]}}";
Rootobject rootobject = JsonConvert.DeserializeObject<Rootobject>(file);
Console.WriteLine(rootobject.data._507888780[1].tank_id);
Console.WriteLine(rootobject.data._507888780[1].all.hits_percents);

和由VS自动创建的类:

public class Rootobject
{
    public string status { get; set; }
    public Meta meta { get; set; }
    public Data data { get; set; }
}
public class Meta
{
    public int count { get; set; }
}
public class Data
{
    public _507888780[] _507888780 { get; set; }
}
public class _507888780
{
    public All all { get; set; }
    public long tank_id { get; set; }
}
public class All
{
    public long spotted { get; set; }
    public long hits_percents { get; set; }
    public long wins { get; set; }
}

我也把测试项目到。net Fiddle,这样你可以更容易地重现它:https://dotnetfiddle.net/gwSA1C在这里,您还可以以一种更可读的方式看到Json字符串。

DeserializeObject没有填充类,导致NullReferenceException

JSON。Net无法将JSON中的507888780属性名称映射到_507888780类属性名称。在这些情况下,您需要通过添加JsonProperty属性将库指向正确的方向:

public class Data
{
    [JsonProperty("507888780")]
    public _507888780[] _507888780 { get; set; }
}

。净小提琴

我正在处理一个类似的问题,我的解决方案是添加JsonProperty属性以及。我的JSON字段名是thumbnail-url-base

我使用Edit>膏体专用>在Visual Studio中粘贴JSON作为类来创建我的类。

    [JsonProperty("thumbnail-url-base")]
    public string thumbnailurlbase { get; set; }

如果有人正在处理一个类似的问题,你的字段名中包含一个连字符,你也可以检查这个stackoverflow问题->是否可以使用包含破折号

的属性名