2016-07-20 29 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