2016-10-18 4 views
0

Ich versuche, diese JSON-Zeichenfolge mithilfe der Newtonsoft.Json-Bibliothek zu deserialisieren. Das zurückgegebene deserialisierte Objekt gibt jedoch immer null zurück. Ich denke, es hängt mit dem Adressobjekt im Player-Objekt zusammen.Deserialisieren von JSON-Objekten, die ein anderes Objekt enthalten

Dies ist die JSON-String

{ 
    "player":{ 
     "id":"ed704e61-f92b-4505-b087-8a47ca4d1eaf", 
     "firstName":"Jack", 
     "lastName":"Russel", 
     "nickname":"Barky", 
     "dateOfBirth":"1995-08-16T00:00:00", 
     "sex":"m", 
     "address":{ 
     "street":"Elmstreet", 
     "number":"5", 
     "alphaNumber":"", 
     "poBox":"", 
     "postalCode":"90001", 
     "city":"Los Angeles", 
     "country":"United States" 
     }, 
     "email":[ 
     "[email protected]", 
     "[email protected]" 
     ], 
     "phone":[ 
     "" 
     ] 
    }, 
    "requestReference":2000, 
    "requestStatus":"Request OK", 
    "requestDetails":null 
} 

Dies sind die RootObject, Spieler und Adressklassen. Es ist das Player-Objekt des RootObject, das einen Nullwert für die obige JSON-Zeichenfolge zurückgibt. So beim Aufruf offcourse eine Nullreference Ausnahme ausgelöst wird:

public class RootObject 
{ 
    public Player player { get; set; } 
    public int requestReference { get; set; } 
    public string requestStatus { get; set; } 
    public string requestDetails { get; set; } 
}  

public class Address 
{ 
    public string street { get; set; } 
    public string number { get; set; } 
    public string alphaNumber { get; set; } 
    public string poBox { get; set; } 
    public string postalCode { get; set; } 
    public string city { get; set; } 
    public string country { get; set; } 
} 

public class Player 
{ 
    public Guid id { get; set; } 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string nickname { get; set; } 
    public DateTime dateOfBirth { get; set; } 
    public string sex { get; set; } 
    public Address address { get; set; } 
    public List<string> email { get; set; } 
    public List<string> phone { get; set; } 
} 

Dies ist die Codezeile verwendet Deserialize:

RootObject playerRoot = JsonConvert.DeserializeObject<RootObject>(_the_json_string_shown_above);

+0

Ihr Code funktioniert für mich mit Json.Net 7 – Nico

+0

Alles gut für mich deserialisiert - nur Code wörtlich getestet. Verwenden Sie Newtonsoft.Json Version 9.0.1 –

Antwort

0

Ich war mit Newtonsoft.Json 8.0.2.19309. Ich musste dem Address-Objekt innerhalb der Player-Klasse ein JsonProperty-Attribut hinzufügen. Dann wird das Objekt einfach deserialisiert.

public class Player 
{ 
    public Guid id { get; set; } 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string nickname { get; set; } 
    public DateTime dateOfBirth { get; set; } 
    public string sex { get; set; } 
    [JsonProperty] 
    public Address address { get; set; } 
    public List<string> email { get; set; } 
    public List<string> phone { get; set; } 
} 
+0

Also welche Version von Newtonsoft.Json verwendeten Sie? –

+0

Newtonsoft.Json 8.0.2.19309 wird für dieses Projekt verwendet. – neuzehie

+0

Sehr merkwürdig, dass es ohne das '[JsonProperty]' - Attribut nicht deserialisieren würde, wenn es gut mit meinen und @ heinzbeinzs funktioniert. Froh, dass es am Ende funktioniert hat :) Happy Coding! –

Verwandte Themen