JsonConvert.DeserializeObject некорректно работает
Получаю данные с локального API
[
{
"id": 4,
"price": 1500,
"startPrice": false,
"servicesTime": "2017-07-07T01:30:00",
"break": "2017-07-07T00:20:00",
"nameService": {
"id": 7,
"nameService": "Маникюр с покрытием",
"category": null,
"services": null
},
"specialist": {
"category": "Ногтевой сервис",
"address": "Karla Marksa 32",
"description": null,
"services": [
null
],
"id": 15,
"name": "Albina",
"phone": "+7(933)233-12-34",
"password": "4321",
"isSpecialist": true
}
},
{
"id": 5,
"price": 1000,
"startPrice": true,
"servicesTime": "2023-04-18T01:30:00",
"break": "2023-04-18T00:20:00",
"nameService": {
"id": 7,
"nameService": "Маникюр с покрытием",
"category": null,
"services": null
},
"specialist": {
"category": "Ногтевой сервис",
"address": "Ульяновск",
"description": "Напишите несколько слов о себе",
"services": [
null
],
"id": 24,
"name": "Кулагина Алена",
"phone": "+7(932)143-25-69",
"password": "9080",
"isSpecialist": true
}
}
]
Пытаюсь десериализовать эти данные, но Specialist и NameService = null.
API
public async Task<IActionResult> GetServicesByName(int nameServisesId)
{
List<Service> listOfServises = _adp.Services.Where(s => s.NameService.Id == nameServisesId).ToList();
var nameServices = await _adp.NameServices.FirstOrDefaultAsync(ns => ns.Id == nameServisesId);
if (nameServices != null)
{
foreach (var item in nameServices.Services)
{
item.Specialist = await _adp.Specialists.FirstOrDefaultAsync(s => s.Services.Contains(item));
}
return Ok(nameServices.Services);
}
else return NoContent();
}
Клиент
private async void nameServiceList_ItemSelected(object sender, SelectedItemChangedEventArgs e)
{
string item = e.SelectedItem.ToString();
var nameServices = localListNameService.FirstOrDefault(l => l.nameService == item);
int nameServicesId = nameServices.Id;
var response = await apiConfig.client.GetAsync(urlSearchByName + $"?nameServisesId={nameServicesId}");
//var services = await response.Content.ReadFromJsonAsync<NameService>();
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
List<Service> services = JsonConvert.DeserializeObject<List<Service>>(response.Content.ReadAsStringAsync().Result);
await Navigation.PushAsync(new PageServiceByName(services));
}
Модель Specialist (API)
using System.ComponentModel.DataAnnotations;
namespace WebApiApplication.Models
{
public class Specialist : User
{
public string Category { get; set; }
public string Address { get; set; }
public string? Description { get; set; }
public List<Service> Services { get; private set; }
public Specialist(string name, string phone, string password, bool isSpecialist, string category, string address) : base(name, phone, password, isSpecialist)
{
Name = name;
Phone = phone;
Password = password;
this.isSpecialist = isSpecialist;
Category = category;
Address = address;
}
}
}
Модель Specialist (клиент)
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json.Serialization;
using static Xamarin.Essentials.Permissions;
namespace graduate_work.Models
{
[Serializable]
public class Specialist : User
{
[JsonPropertyName("category")]
public string Category { get; set; }
[JsonPropertyName("address")]
public string Address { get; set; }
[JsonPropertyName("description")]
public string Description { get; set; }
[JsonPropertyName("services")]
public List<Service> Services { get; private set; }
[System.Text.Json.Serialization.JsonConstructor]
public Specialist(string name, string phone, string password, bool isSpecialist, string category, string address, string description = "Напишите несколько слов о себе") : base(name, phone, password, isSpecialist)
{
Name = name;
Phone = phone;
Password = password;
this.isSpecialist = isSpecialist;
Category = category;
Address = address;
Description = description;
Services = new List<Service>();
}
}
}
Модель Service (API)
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using System.ComponentModel.DataAnnotations.Schema;
namespace WebApiApplication.Models
{
public class Service
{
public int Id { get; set; }
[Column(TypeName = "decimal(20, 0)")]
public decimal Price { get; set; }
public bool StartPrice { get; set; }
public DateTime ServicesTime { get; set; }
public DateTime Break { get; set; }
public NameService? NameService { get; set; }
public Specialist? Specialist { get; set; }
}
}
Модель Service (Клиент)
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json.Serialization;
namespace graduate_work.Models
{
public class Service
{
public int Id { get; set; }
public decimal Price { get; set; }
public bool StartPrice { get; set; }
public DateTime ServicesTime { get; set; }
public DateTime Break { get; set; }
[JsonPropertyName("nameService")]
public NameService NameService { get; private set; }
[JsonPropertyName("specialist")]
public Specialist Specialist { get; private set; }
}
}
Источник: Stack Overflow на русском