2016-07-20 2 views
0

ich Rest Methode mit get verwenden möchten. Mein Code ist unten;Xamarin Rest Web-Service nicht deserialisieren nicht

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; 
    } 
} 

Die URL funktioniert gut. Und mein Inhaltswert hat json string. Aber die Serialisierung funktioniert nicht.

var result = JsonConvert.DeserializeObject (Inhalt); Dieser Code wird nicht deserialisiert.

Mein Modell ist;

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

Welche Inhalte wie sieht Ihre JSON? – SushiHangover

+0

{ "Ergebnis": { "Retval": { "@ xsi.type": "registeredDevice", "clientuuid": "28asgargb-AKSE-41dfgsdg51", "deviceuuid": 123456}, "Erfolg": true}} @ SushiHangover – Aybuke

Antwort

1

denke ich, das Problem kommt aus:

private object retval = null; 

für mich So ist die beste Art und Weise Serialisierung Objekte in C# zu konstruieren, ist diese Website zu nutzen:

http://json2csharp.com/

Dies wird Ihnen sagen, wenn Ihr json korrekt ist, und er wird die Klassen, die Sie für die Sie benötigen generieren, hier die von json2csharp generierten Klassen

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

Vielen Dank, es funktioniert perfekt. Vielen Dank nochmal – Aybuke

+0

den Beitrag als für die anderen Benutzer aufgelöst setzen;) – OrcusZ