我正在做一个程序,我需要与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"}]}
答案 0 :(得分:2)
当你反序列化并获得空值时 - 很有可能它是2个问题之一:
您要反序列化的具体类与您要反序列化的json中返回的字段不匹配,或者
您正在反序列化到没有setter的字段
还有其他可能的问题,但这些问题涵盖了我在代码审查中看到的大约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"}]}