JsonConvert.DeserializeObject некорректно работает

Рейтинг: 0Ответов: 0Опубликовано: 20.04.2023

Получаю данные с локального 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; }
    }
}

Ответы

Ответов пока нет.