C# 将对象反序列化到类中不起作用
我试图使用从api返回的json对象中的反序列化对象为令牌设置一个类。但是,当我运行下面的代码时,它会将所有值设置为null或0,而不是我从api得到的结果 cs代码C# 将对象反序列化到类中不起作用,c#,json,xamarin.forms,C#,Json,Xamarin.forms,我试图使用从api返回的json对象中的反序列化对象为令牌设置一个类。但是,当我运行下面的代码时,它会将所有值设置为null或0,而不是我从api得到的结果 cs代码 var resultString = await result.Content.ReadAsStringAsync(); var post = JsonConvert.DeserializeObject<Token>(resultString); JSON响应 "{\"code\":201,\"status\":\"
var resultString = await result.Content.ReadAsStringAsync();
var post = JsonConvert.DeserializeObject<Token>(resultString);
JSON响应
"{\"code\":201,\"status\":\"Success\",\"message\":\"Object found\",\"data\":{\"StaffID\":14,\"StaffSurname\":\"Test\",\"StaffForename\":\"Test\",\"StaffEmail\":\"test@test.com\",\"PrimaryStaffRoleID\":5,\"TokenApi\":\"testToken\"}}"
如果分析发布的JSON,则尝试反序列化的对象位于JSON的“data”属性内
我建议您创建一个类,用
Data
属性表示JsonResponse。这将是您的标记
如果您分析发布的JSON,那么您尝试反序列化的对象位于JSON的“data”属性内
我建议您创建一个类,用
Data
属性表示JsonResponse。这将是您的标记
检索到与此对象匹配的字符串
public string code {get;set;}
public string Success {get;set;} ...
令牌与json中的数据匹配,所以
var post = JsonConvert.DeserializeObject<Token>(resultString.data);
var post=JsonConvert.DeserializeObject(resultString.data);
会更好。检索到与此对象匹配的字符串
public string code {get;set;}
public string Success {get;set;} ...
令牌与json中的数据匹配,所以
var post = JsonConvert.DeserializeObject<Token>(resultString.data);
var post=JsonConvert.DeserializeObject(resultString.data);
更好。首先,您尝试映射的数据位于json中另一个名为
data
的属性中,其次,您的json没有名为标记的属性
实际上,问题是您没有使用反映json的正确类型,这意味着您没有正确的c#type映射到json,您可以使用生成正确的类型,正确的类为:
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);
var resultString=await result.Content.ReadAsStringAsync();
var post=JsonConvert.DeserializeObject(resultString);
一个更好的选择是使用它,它甚至可以为您生成c#或他们支持的任何其他语言的代码。首先,您试图映射的数据位于json中另一个名为data
的属性中,其次,您的json没有名为标记的属性
实际上,问题是您没有使用反映json的正确类型,这意味着您没有正确的c#type映射到json,您可以使用生成正确的类型,正确的类为:
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);
var resultString=await result.Content.ReadAsStringAsync();
var post=JsonConvert.DeserializeObject(resultString);
一个更好的选择是使用它,它甚至可以用c#或他们支持的任何其他语言为您生成代码。您的意思是什么不起作用?它一直将每个值设置为null或0,即使我的json响应中有数据。您的意思是什么不起作用?它一直将每个值设置为null或0,即使我在json响应中有数据。