2017-10-13 49 views
0

我想从使用来自json对象的DeserializeObject设置一个令牌的类,我从我的api返回。但是,当我运行下面的代码它将所有值设置为null或0,而不是我从API获得的结果。将对象反序列化成类不起作用

CS代码

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\":\"[email protected]\",\"PrimaryStaffRoleID\":5,\"TokenApi\":\"testToken\"}}" 
+0

你的意思是不起作用? –

+0

它不断设置每个值为null或0,即使我有我的JSON响应中的数据。 –

回答

3

首先你试图映射的数据是内部其他属性在JSON称为Data,其次你的JSON不具有名称的属性Token

实际上是你没有使用正确类型的问题反映了你的JSON,意味着你不具备这将被映射到JSON正确的C#的类型,你就可以使用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#中,或者他们是支持任何其他语言生成代码为您服务。

0

如果您分析您发布的JSON,你试图反序列化对象是内你的json的“data”属性。

enter image description here

我建议你创建一个类来表示JsonResponse用Data属性。这将是你Token

0

您检索在JSON匹配这个对象

public string code {get;set;} 
public string Success {get;set;} ... 

和令牌是匹配数据的字符串,所以

var post = JsonConvert.DeserializeObject<Token>(resultString.data); 

会更好。