我正在尝试使用我从api返回的json对象使用DeserializeObject为令牌设置一个类。但是当我运行下面的代码时,它将所有值设置为null或0,而不是我从api获得的结果。
cs code
var resultString = await result.Content.ReadAsStringAsync();
var post = JsonConvert.DeserializeObject<Token>(resultString);
上课
public class Token : ContentPage
{
public int StaffID { get; set; }
public string TokenApi { get; set; }
public string StaffForename { get; set; }
public string StaffSurname { get; set; }
public string StaffEmail { get; set; }
public int PrimaryStaffRoleID { get; set; }
}
JSON回复
"{\"code\":201,\"status\":\"Success\",\"message\":\"Object found\",\"data\":{\"StaffID\":14,\"StaffSurname\":\"Test\",\"StaffForename\":\"Test\",\"StaffEmail\":\"test@test.com\",\"PrimaryStaffRoleID\":5,\"TokenApi\":\"testToken\"}}"
答案 0 :(得分:3)
首先,您要映射的数据位于json中名为Data
的另一个属性中,其次,您的json没有名为Token
的属性
问题实际上是你没有使用反映你的json的正确类型,意味着你没有正确的c#类型会被映射到json,你可以使用json2charp.com生成正确的类型,正确的类因为它是:
public class Data
{
public int StaffID { get; set; }
public string StaffSurname { get; set; }
public string StaffForename { get; set; }
public string StaffEmail { get; set; }
public int PrimaryStaffRoleID { get; set; }
public string TokenApi { get; set; }
}
public class RootObject
{
public int code { get; set; }
public string status { get; set; }
public string message { get; set; }
public Data data { get; set; }
}
现在使用RootObject
作为类型参数进行反序列化将完全正常,如:
var resultString = await result.Content.ReadAsStringAsync();
var post = JsonConvert.DeserializeObject<RootObject>(resultString);
更好的选择是使用QuickType.IO,它甚至可以用c#或他们支持的任何其他语言为您生成代码。
答案 1 :(得分:0)
答案 2 :(得分:0)
您将检索到与此对象匹配的字符串
public string code {get;set;}
public string Success {get;set;} ...
Token正在匹配json中的数据,所以
var post = JsonConvert.DeserializeObject<Token>(resultString.data);
会更好。