#c# #json #json.net #deserialization
#c# #json #json.net #десериализация
Вопрос:
Я пытаюсь десериализовать эту строку JSON с помощью Newtonsoft.Библиотека Json. Но возвращаемый десериализованный объект всегда возвращает null . Я думаю, что это связано с объектом address внутри объекта player.
Это строка JSON
{
"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":[
"barky@dog.com",
"barky@mydogpension.com"
],
"phone":[
"0123 45 67 89 10"
]
},
"requestReference":2000,
"requestStatus":"Request OK",
"requestDetails":null
}
Это классы RootObject, Player и Address . Это объект Player корневого объекта, который продолжает возвращать нулевое значение для приведенной выше строки JSON. Поэтому при вызове offcourse генерируется исключение nullreference:
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; }
}
Это строка кода, используемая для десериализации:
RootObject playerRoot = JsonConvert.DeserializeObject<RootObject>(_the_json_string_shown_above);
Комментарии:
1. Ваш код работает для меня с Json. Net 7
2. Для меня все десериализуется нормально — просто проверил ваш код дословно. Использование Newtonsoft. Версия Json 9.0.1
Ответ №1:
Я использовал Newtonsoft.Json 8.0.2.19309. Мне пришлось добавить атрибут JsonProperty к объекту Address внутри класса Player. Затем объект десериализуется просто отлично.
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; }
}
Комментарии:
1. Итак, какая версия Newtonsoft. Вы использовали Json?
2. Newtonsoft. Для этого проекта используется Json 8.0.2.19309.
3. Очень странно, что он не десериализовался бы без
[JsonProperty]
атрибута, когда он отлично работал с моими и @heinzbeinz. Рад, что в конце концов он заработал 🙂 Счастливого кодирования!