JSON, как спроектировать модель EF и десериализовать ее - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь внедрить службу отдыха asp.net web API 2. Я пытаюсь спроектировать модель в соответствии с ответом другого API отдыха и сохранить значения в базе данных с помощью EF.

Вот пример ответа JSON:

"{\"referenceId\":\"0000000029\",\"paymentId\":\"MDO1036616\",\"productCode\":\"001002461285\",\"quantity\":\"1\",\"currency\":\"TL\",\"unitPrice\":\"46,47\",\"totalPrice\":\"46,47\",\"merchantProductCode\":\"\",\"purchaseStatusCode\":\"00\",\"purchaseStatusDate\":\"2019-03-16T14:46:00Z\",\"coupons\":[{\"serials\":[\"100b7fe6-581d-46aa-aee7-8429b51edd20\"],\"pins\":[\"PL46-WR9T-FTGD4-3PXC-9MCSa\"]}],\"version\":\"V1\",\"signature\":\"aee9dda307fa5001494c0fe793c1aa20\",\"applicationCode\":\"52e7cf966b724749a7c4efadc3727ed7\"}"

Вот моя модель:

public class ConfirmResponse
{
    public int Id { get; set; }
    public string referenceId { get; set; }
    public string version { get; set; }
    public string signature { get; set; }
    public string paymentID { get; set; }
    public string productCode { get; set; }
    public string currency { get; set; }
    public string ApplicationCode { get; set; }
    public float unitPrice { get; set; }
    public float totalPrice { get; set; }
    public string purchaseStatusCode { get; set; }
    public DateTime? purchaseStatusDate { get; set; }
    public DateTime? requestDateTime { get; set; } = DateTime.Now;
    public string merchantProductCode { get; set; }
    public Coupon[] coupons { get; set; }


}

Я не мог понять, как создать модель для купонов в JSON.

Вот мой контроллер:

[HttpPost, Route("confirmation")]
    public async Task<IHttpActionResult> PostConfirmation(ConfirmRequest confirm)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }


        var applicationCode = System.Configuration.ConfigurationManager.AppSettings["ApplicationCode"];
        var secretKey = System.Configuration.ConfigurationManager.AppSettings["SecretKey"];
        var version = System.Configuration.ConfigurationManager.AppSettings["Version"];
        var source = applicationCode + confirm.referenceId + version + confirm.validatedToken+ secretKey;

        using (var md5Hash = MD5.Create())
        {
            var hash = GetMd5Hash(md5Hash, source);
            confirm.signature = hash;
            confirm.ApplicationCode = applicationCode;
            confirm.version = version;

        }

        context.ConfirmRequests.Add(confirm);
        await context.SaveChangesAsync();

        HttpClient httpClient = new HttpClient();


        HttpContent content = new StringContent(
            JsonConvert.SerializeObject(confirm),
            Encoding.UTF8,
            "application/json"
        );

        var response =
            await httpClient.PostAsync("https://test.com/purchaseconfirmation", content);

       (response.ToString());
        var htmlResponse = string.Empty;
        if (response != null)
        {
            switch (response.StatusCode)
            {
                case HttpStatusCode.NotFound:
                    return NotFound();

                case HttpStatusCode.InternalServerError:
                    return InternalServerError();

                case HttpStatusCode.OK:
                    htmlResponse = await response.Content.ReadAsStringAsync();
                    //Adding Response into database
                    context.ConfirmResponses.Add(JsonConvert.DeserializeObject<ConfirmResponse>(htmlResponse));
                    await context.SaveChangesAsync();
                    return Ok(htmlResponse);

                case HttpStatusCode.BadRequest:
                    return BadRequest();

                case HttpStatusCode.Unauthorized:
                    return Unauthorized();

                case HttpStatusCode.RequestTimeout:
                    return InternalServerError();

                default:
                    htmlResponse = await response.Content.ReadAsStringAsync();
                    break;
            }
        }

        return Ok(htmlResponse);
    }

И я думаю, что мне нужно создать / спроектировать одну или несколько моделей для хранения сериалов и выводов. Если да, мне нужно использовать транзакции в моем контроллере? Как мне изменить мою часть SaveChangesAsync?

С наилучшими пожеланиями.

...