Десериализация потока JSON из API в .Net Core 3.0, оставляя все поля пустыми - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть простое приложение WPF / .Net Core 3.0, которое выполняет GET на конечной точке Web API:

private HttpClient httpClient = new HttpClient();

private async Task GetClients()
{
    var serializer = new DataContractJsonSerializer(typeof(List<ClientGetDto>));
    var streamTask = httpClient.GetStreamAsync("https://mywebapp.com/api/Clients");
    List<ClientGetDto> clientDtos = serializer.ReadObject(await streamTask) as List<ClientGetDto>;
}

ClientGetDto выглядит следующим образом:

{
    public int Id { get; set; }
    public string ClientCode { get; set; }
    public string ApiUrl { get; set; }
    public string CompanyName { get; set; }
    public string FranchiseName { get; set; }
    public int? ProLicenses { get; set; }
    public int? LiteLicenses { get; set; }
    public int? ProSalesLicenses { get; set; }
    public int? LiteSalesLicenses { get; set; }
    public bool? IsActive { get; set; }
    public DateTime? StartOfAgreementDate { get; set; }
    public int? DebitOrderDay { get; set; }
    public DateTime? DebitOrderStartDate { get; set; }
    public decimal? ContractAmount { get; set; }
    public bool? DebitOrderFormReceived { get; set; }
    public bool? CancellationReceived { get; set; }
    public DateTime? CancellationDate { get; set; }
    public string CompanyRegNo { get; set; }
    public string DbUrl { get; set; }
    public string DbName { get; set; }
    public double? CloudStorageQuota { get; set; }
    public string Comments { get; set; }
    public int? FranchiseId { get; set; }
    public bool? IsTestDb { get; set; }
    public bool? IsGumtreeRegistered { get; set; }
    public int? FusionClientId { get; set; }
    public string CountryCode { get; set; }
}

иJSON, который возвращается API:

[
  {
    "id": 3,
    "clientCode": "cx0007",
    "apiUrl": "https://mywebapp/api",
    "companyName": "ACME Company",
    "franchiseName": "ACME Franchise",
    "proLicenses": 1,
    "liteLicenses": 0,
    "proSalesLicenses": 0,
    "liteSalesLicenses": 0,
    "isActive": true,
    "startOfAgreementDate": "2007-08-01T00:00:00",
    "debitOrderDay": 1,
    "debitOrderStartDate": "2012-03-01T00:00:00",
    "contractAmount": 695.00,
    "debitOrderFormReceived": true,
    "cancellationReceived": false,
    "cancellationDate": "2012-10-18T00:00:00",
    "companyRegNo": "",
    "dbUrl": "mydb.co.za",
    "dbName": "db1",
    "cloudStorageQuota": 5.0,
    "comments": null,
    "franchiseId": null,
    "isTestDb": false,
    "isGumtreeRegistered": false,
    "fusionClientId": null,
    "countryCode": "US"
  },
  ...
]

Моя проблема заключается в том, что код правильно десериализует JSON в список объектов ClientGetDto, но все поля являются нулевыми. Это не выбрасывание каких-либо исключений или чего-либо еще. Я попытался украсить свою модель ClientGetDto с помощью [DataContract] и [DataMember], но это не имело никакого значения (и не будет, поскольку имена полей модели точно такие же, как в данных JSON)

Есть идеи?

1 Ответ

1 голос
/ 06 ноября 2019

Вы должны пометить каждое свойство с помощью [JsonPropertyName ("")], потому что json чувствителен к регистру (я думаю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...