JSON.NET не конвертирует внезапно - PullRequest
0 голосов
/ 03 июля 2018

Я писал код для сбора данных из API с использованием библиотек RestSharp и JSON.net. Это прекрасно работало до недавнего времени, когда мои модели начали возвращаться к нулю (без изменений в моих знаниях). Содержимое запроса содержит информацию, поэтому это не должен быть нулевой объект. Результат отображается как ноль.

Ниже приведен фрагмент кода того, как я делаю преобразование:

 IRestResponse summaryResponse = summaryClient.Execute(summaryRequest);
        RootobjectSummary result = JsonConvert.DeserializeObject<RootobjectSummary>(summaryResponse.Content);
        return result;

Ниже приведена модель, использованная выше:

    public class RootobjectSummary
{
    public InsuranceSummary InsuranceSummary { get; set; }
}

public class InsuranceSummary
{
    public int InsuredTenantsCount { get; set; }
    public int NewPoliciesCount { get; set; }
    public int CancelledPoliciesCount { get; set; }
    public float PercentageOfTenantsInsured { get; set; }
    public float CoverageTotal { get; set; }
    public float PaymentTotal { get; set; }
    public float RefundTotal { get; set; }
    public float NetPaymentAmount { get; set; }
    public string StartDate { get; set; }
    public string EndDate { get; set; }
}

И, наконец, получаемый ответ JSON должен быть преобразован:

"{\"insurance_summary\":{\"insured_tenants_count\":7,\"new_policies_count\":7,\"cancelled_policies_count\":0,\"percentage_of_tenants_insured\":13.20754716981132,\"coverage_total\":130000.0,\"payment_total\":0.0,\"refund_total\":0.0,\"net_payment_amount\":0.0,\"start_date\":\"2018-07-03\",\"end_date\":\"2018-07-03\",\"facility_policy_number\":\"ABC12345\",\"master_policy_number\":\"CBA54321\"},\"meta\":{\"status_code\":200,\"status_message\":\"OK\",\"status_cat\":\"https://http.cat/200\",\"request_method\":\"GET\",\"request_id\":\"5a598888-eab3-4fab-9474-8856418f506b\",\"parameters\":{\"CreatedAfter\":\"2017-01-01-01T00:00:00-07:00\",\"CreatedBefore\":\"2018-07-01T00:00:00-07:00\",\"oauth_consumer_key\":\"GVelfUpJTn2NqGNf1bwJTbVTl5MDdHp3uTXyDaCd\",\"oauth_nonce\":\"9072365\",\"oauth_signature_method\":\"PLAINTEXT\",\"oauth_timestamp\":\"1530632568\",\"oauth_version\":\"1.0\",\"oauth_signature\":\"TRDNYFta6z8zNwE5lFCErnShnYLEvsFebz0wPRdy\\u0026\",\"facility_id\":\"b2af724f-3af4-4d62-94e4-88211763d18e\"}}}"

1 Ответ

0 голосов
/ 03 июля 2018

Вы должны настроить десериализатор для работы с именами в случае змеи:

DefaultContractResolver contractResolver = new DefaultContractResolver
{
    NamingStrategy = new SnakeCaseNamingStrategy()
};
RootobjectSummary result = JsonConvert.DeserializeObject<RootobjectSummary>(summaryResponse.Content, new JsonSerializerSettings
{
    ContractResolver = contractResolver
});
...