JsonConvert.DeserializeObject返回null - C#VS.

时间:2018-04-23 00:46:54

标签: c# json visual-studio

我正在做一个程序,我需要与airtables api进行交互,以便从那里获得注册成员。 但我的代码没有用,说class.Id.get returned null。 代码:

public class TraderData
{
    public string Id { get; set; }
    public string Fields { get; set; }
    public string Users {  get;  set; }
    public string Macaddress_value { get; set; }
    public string Email_value { get; set; }
    public string Createdtime { get; set; }
}

static void GetUserData()
{
    WebClient web = new WebClient();
    web.Headers.Set(HttpRequestHeader.Authorization, "Bearer keycxCsSzHzvAquck");
    string json = web.DownloadString("https://api.airtable.com/v0/appO1mkBuYFHD0tH5/users_control");
    var data = JsonConvert.DeserializeObject<TraderData>(json);
    Console.WriteLine(data.Id.ToString());
}

API:

{"records":[{"id":"reczOujwG3H1DuhR7","fields":{"Users":"user_juseh","macaddress_value":"123456789","email_value":"juseh@hotmail.com"}, "createdTime":"2018-04-21T22:36:48.000Z"}]}

2 个答案:

答案 0 :(得分:2)

当你反序列化并获得空值时 - 很有可能它是2个问题之一:

  1. 您要反序列化的具体类与您要反序列化的json中返回的字段不匹配,或者

  2. 您正在反序列化到没有setter的字段

  3. 还有其他可能的问题,但这些问题涵盖了我在代码审查中看到的大约90%的错误。

    在你的情况下,你已成为第一个受害者 - 你的班级和你的json不匹配。根据您提供的示例,我认为您的代码期望类似下面的结构。

    Public class TraderFields {
       public string Users {get; set;}  
       public string macaddress_value {get; set; }
       public string email_value {get;set;}
    }
    Public class TraderRecord {
       public string id {get;set;}
       public TraderFields fields {get;set;} = New TraderFields();
       public DateTime createdTime {get;set;}
    }
    Public class TraderData {
       public List<TraderRecord> records {get; set; } = New List<TraderRecord>()
    }
    

    你肯定会在其他答案中看到同样的事情。仅供参考 - 这也是我们大多数人使用工具从json数据自动生成类的原因(我们在手工编写类时都会遗漏这些东西)。祝你好运!

答案 1 :(得分:0)

您的模型需要调整为以下内容:

public class TraderDataRecords 
{ 
    public TraderDataRecords() { 
        Records = new TraderData[0];
    }
    public TraderData[] Records { get; set; } 
}

注意:您的数据样本在电子邮件之后还有一个额外的支撑...

见下文

{"records":[{"id":"reczOujwG3H1DuhR7","fields":{"Users":"user_juseh","macaddress_value":"123456789","email_value":"juseh@hotmail.com"**}**,"createdTime":"2018-04-21T22:36:48.000Z"}]}