2016-07-20 28 views
0

我想用get方法使用rest。我的代码在下面;Xamarin其他网络服务不反序列化

public class RegisterPage : ContentPage 
{ 
    Label label, l4, label2; 
    public RegisterPage() 
    { 
     Button btn = new Button 
     { 
      Text = "register" 
     }; 

     btn.Clicked += Btn_Clicked; 
     label = new Label(); 
     l4 = new Label(); 
     label2 = new Label(); 



     Content = new StackLayout 
     { 
      Children = { 
       btn, 
       label, 
       l4, 
       label2 
      } 
     }; 
    } 

    private async void Btn_Clicked(object sender, EventArgs e) 
    { 

     HttpClient client = new HttpClient(); 
     client.DefaultRequestHeaders.Add(Constants.API_KEY_HEADER_KEY, Constants.API_KEY); 
     string URL = Constants.URL; 

     var response = await client.GetAsync(URL); 

     var content = await response.Content.ReadAsStringAsync(); 
     var result = JsonConvert.DeserializeObject<Models.Result>(content); 


     label.Text = result.Success.ToString(); 


     l4.Text = result.Error.ToString(); 
     label2.Text = ((RegisteredDevice)result.Retval).Clientuuid + " - " + ((RegisteredDevice)result.Retval).Deviceuuid; 
    } 
} 

该网址运行良好。而我的内容值有json字符串。但是序列化不起作用。

var result = JsonConvert.DeserializeObject(content); 此代码不会软化。

我的模特是;

public class Result 
{ 
    private object retval = null; 
    private bool success = false; 
    private Error error = null; 


    internal Error Error 
    { 
     get { return error; } 
     set { error = value; } 
    } 

    public bool Success 
    { 
     get { return success; } 
     set { success = value; } 
    } 

    public object Retval 
    { 
     get { return retval; } 
     set { retval = value; } 
    } 
} 

JSON:

{ 
    "result":{ 
     "retail":{ 
     "@xsi.type":"registeredDevice", 
     "clientuuid":"28asgargb-acfe‌​-41dfgsdg51", 
     "deviceuuid":123456 
     }, 
     "success":true 
    } 
} 
+0

什么是您的JSON内容看起来像生成的类? – SushiHangover

+0

{“result”:{“retval”:{“@ xsi.type”:“registeredDevice”,“clientuuid”:“28asgargb-acfe-41dfgsdg51”,“deviceuuid”:123456},“success”:true}} @ SushiHangover – Aybuke

回答

1

我认为问题来自:

private object retval = null; 

所以对我来说,构建在C#中的序列化对象的最佳方法是使用这个网站:

http://json2csharp.com/

这会告诉你,如果你的JSON是正确的,他会产生你需要为你的类,这里由json2csharp

public class Retail 
{ 
    public string [email protected] { get; set; } 
    public string clientuuid { get; set; } 
    public int deviceuuid { get; set; } 
} 

public class Result 
{ 
    public Retail retail { get; set; } 
    public bool success { get; set; } 
} 

public class RootObject 
{ 
    public Result result { get; set; } 
} 
+1

非常感谢,它正在完善工作。再次感谢您 – Aybuke

+0

将该帖子解析为其他用户;) – OrcusZ