2014-02-18 21 views
5

Ich Deserialisieren ein Objekt mit diesem CodeDeserialisieren JSON produziert Standardklasse

PlayerData = JsonConvert.DeserializeObject<UserData>(response.Content); 

Mein Userdata-Klasse ist als

folgt
public class UserData : BindableBase 
    { 
     public string UID { get; set; } 
     public string UDID { get; set; } 
     public object liveID { get; set; } 
     public int timeLastSeen { get; set; } 
     public string country { get; set; } 
     public string username { get; set; } 
     public string session { get; set; } 
     public int serverTime { get; set; } 
     public int PremiumCurrency { get; set; } 

     public UserData() 
     { 

     } 
    } 

Wenn es deserialisiert ich ein Objekt zurückgegeben, als ob ich gerade genannt habe new UserData(), aber wenn ich die : BindableBase aus der Klassendefinition entfernen, deserialisiert es korrekt. Ich vermute, das liegt daran, dass die Basisklasse einige Eigenschaften enthält, die nicht im JSON enthalten sind, aber ich möchte nur, dass diese ignoriert werden. Gibt es eine Einstellung dafür?

Die BindableBase Klasse ist wie folgt

[Windows.Foundation.Metadata.WebHostHidden] 
[DataContract] 
public abstract class BindableBase : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null) 
    { 
     if (object.Equals(storage, value)) return false; 

     storage = value; 
     this.OnPropertyChanged(propertyName); 
     return true; 
    } 

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     var eventHandler = this.PropertyChanged; 
     if (eventHandler != null) 
     { 
      eventHandler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

Die JSON ist als

{ 
    "UID": "4", 
    "UDID": "", 
    "liveID": null, 
    "timeLastSeen": 1392730436, 
    "country": "GB", 
    "username": "User4", 
    "PremiumCurrency": "20", 
    "session": "5c8583311732fa816e333dc5e6426d65", 
    "serverTime": 1392730437 
} 
+0

Können Sie Ihren 'BindableBase' Klassencode angeben? Kann das Problem nicht reproduzieren. Verwenden Sie auch eine lase-Version von 'Json.Net' oder eine bestimmte? – Sergio

+1

Bearbeitete Frage mit dem Basisklassencode. Es ist die neueste Version von JSON.net –

Antwort

1

folgt genug Es ist klar zu beantworten, dass das Problem in DataContract Attribute der Basisklasse ist. Eine einfache Möglichkeit, das Problem zu beheben, ist es, Eigenschaften der abgeleiteten Klasse mit DataMember Attributen zu dekorieren.