>source

여기서 문제를 볼 수 있는 사람이 있습니까? "OrderItemPayment" 개체는 직렬화 해제 중에 어떤 이유로 배열이 됩니까?

다음과 같은 응답을 역직렬화하려고 할 때:

이 결과를 얻었습니다.

{
   "items":[
      {
         "created_at":"2021-01-28 18:37:45",
         "payment":[
         ]
      },
      {
         "created_at":"2021-01-28 16:06:23",
         "payment":[
         ]
      }
   ]
}

내 수업

[Serializable]
public class Order
{
    [JsonProperty("items")]
    public OrderItem[]? Items { get; set; }
}
[Serializable]
public class OrderItem
{
    [JsonProperty("created_at")]
    public string? CreatedAt { get; set; }
    [JsonProperty("payment")]
    public OrderItemPayment Payment { get; set; }= new OrderItemPayment();
}
[Serializable]
public record OrderItemPayment
{
    [JsonProperty("amount_paid")]
    public decimal AmountPaid { get; set; }
    [JsonProperty("shipping_captured")]
    public decimal ShippingCaptured { get; set; }
}

내 결과:

초기 스크린샷과 모델의 결제는 단일 개체입니다. 보여주신 결과(response.Content)에서 배열입니다.

Llama2021-11-28 03:39:11

Fckin 지옥은 그것을 본 적이 없었을 것입니다, 잘했습니다 @Llama

Error 404 Brain not found2021-11-28 03:39:11

@Llama 네 그게 제 문제입니다. 결제는 객체이기 때문에 배열이 아닌 객체로 해석되어야 하는데 왜 그런지 모르겠습니다.

Hannes2021-11-28 03:39:11

그래서 귀하의 질문은 "때로는 속성을 배열로, 때로는 객체로 반환하는 API를 처리하는 방법"입니까?

Llama2021-11-28 03:39:11

@Llama는 훨씬 더 나은 제목이었고 예, 그것은 정말로 내 질문입니다.

Hannes2021-11-27 08:32:02
  • 답변 # 1

    스크린샷에 따라 OrderItem을 수정해야 합니다.

    public partial class OrderItem
        {
        [JsonProperty("created_at")]
        public string? CreatedAt { get; set; }
        [JsonProperty("payment")]
        public List<OrderItemPayment> Payment { get; set; }
    }
    

    스크린샷에 따라 결제는 []로 역직렬화되어야 합니다.

    우편 배달부의 응답은 지불이 객체이고 amount_paid..와 같은 데이터를 포함하고 있음을 보여줍니다. 그러나 restsharp 클라이언트에서 데이터를 가져와서 내 모델에 따라 역직렬화하려고 하면 OrderItemPayment 객체가 어떤 이유로 배열로 변환됩니다.

    Hannes2021-11-28 03:39:11

    @Hannes Response는 데이터를 아무 것도 변환하지 않습니다. 실제 json 객체를 보여줍니다.

    Serge2021-11-28 03:39:11

    제 문제를 이해하기 쉽도록 제목을 변경했습니다.

    Hannes2021-11-27 08:36:42

    @Hannes 문제는 클라이언트 측 직렬화가 아닌 API입니다. API가 결제 데이터를 반환하지 않습니다.

    Serge2021-11-27 13:53:55
  • 이전 c++ : cin.ignore(numeric_limits::max(), '\n')는 정확히 무엇을 합니까?
  • 다음 Python 단기집중과정 프로젝트: 개체에 속성이 없습니다.