【问题标题】:How to remake my wrapper code in .Net Core?如何在 .Net Core 中重新制作我的包装器代码?
【发布时间】:2021-05-14 23:32:05
【问题描述】:

这是我的实际包装代码:

 namespace RestApiTO.Wrapper
{
    public class RequestModel<T> : AttributeModel<T>
    {

        public RequestModel(T data)
        {
            Data = data;
        }
        public T Data { get; set; }
    }

    public class AttributeModel<T>
    {
        public AttributeModel()
        {

        }
        public AttributeModel(T data)
        {
            Attributes = data;
        }

        public T Attributes { get; set; }
    }

    public class OrderRequestModel<T> : AttributeModel<T>
    {

        public OrderRequestModel(T attributes, List<Order_items> dataOrderItems)
        {
            this.Attributes = attributes;
            this.Order_detail = dataOrderItems;
        }

        public int CustomerId { get; set; }
        public List<Order_items> Order_detail { get; set; }
    }

}

这是我预期的请求正文:

{
  "data": {
    "attributes": {
        "user_id": 1,
        "order_detail": [
            {
                "product_id": 1,
                "quantity": 1
            },
            {
                "product_id": 2,
                "quantity": 2
            }
        ]
    }
  }
}

这是模式数据库: Schema database

这是我的控制器

     [HttpPost]
        public async Task<ActionResult> PostOrders([FromBody]RequestModel<AttributeModel<OrderRequestModel<Order_items>>> orders)
        { 
// do something }

如果我使用此代码,则会出现错误:

类型“xxxxxxx”的构造函数“Void .ctor(System.Guid, System.String, System.String, System.String, System.String)”中的每个参数都必须绑定到反序列化时的对象属性或字段。每个参数名称必须与对象上的属性或字段匹配。匹配可以不区分大小写。

我想按照我的预期制作我的请求正文,但我的想法更难。

【问题讨论】:

标签: c# asp.net .net entity-framework


【解决方案1】:

您可以将无参数构造函数添加到您的类中。比在序列化期间它使用此构造函数创建对象。之后,它会使用 setter 将请求属性映射到您的对象属性。

还有here 很好地解释了去实化的工作原理以及它如何寻找构造函数。

【讨论】:

  • 嗨@Serhii,非常感谢您的洞察力,这有助于我理解这一点。
猜你喜欢
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 2017-11-03
  • 2022-07-27
  • 1970-01-01
相关资源
最近更新 更多