【问题标题】:Map JSON object to class in Azure Function API Request class parameter将 JSON 对象映射到 Azure 函数 API 请求类参数中的类
【发布时间】:2020-02-10 10:35:26
【问题描述】:

将 JSON 对象映射到类 c# 属性 用例: 我在 Azure Function 中创建 API 并像下面的代码一样传递参数-ReservationDraftRequestDto 类

[FunctionName("Function1")] 公共静态异步任务运行( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] ReservationDraftRequestDto reservationDraftRequestDto, ILogger 日志) { }

DTO 类:

API URI:http://localhost:7071/api/Function1 JSON-for 调用 API 是: { “SoftHoldID”:444, “应用”:[ { “SoftHoldID”:444, "UsageYearID": 4343, “应用天数”:0, “应用积分”:1 } ], “客人”:[ 1、 2 ] }

public class ReservationDraftRequestDto
{

    public int SoftHoldIDs { get; set; }
    public int[] Guests { get; set; }
    public AppliedUsage[] AppliedUsages { get; set; }

}


public class AppliedUsage
{
    public int SoftHoldID { get; set; }
    public int UsageYearID { get; set; }
    public int DaysApplied { get; set; }
    public int PointsApplied { get; set; }
}

问题是:当我使用上述有效负载调用 API 时,API 类参数-ReservationDraftRequestDto 未映射 AppliedUsages 数组值。

请让我知道我需要做什么将 API JSON 有效负载映射到 ReservationDraftRequestDto

发送请求-

代码:

【问题讨论】:

    标签: c# arrays api asp.net-core json.net


    【解决方案1】:

    这是设计使然。绑定逻辑在反序列化json正文内容时明确排除数组。您可以参考here。

    如果你想获取对象,这里有一个简单的解决方法:

    [FunctionName("Function1")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req,
        ILogger log)
    {
        var reservationDraftRequestDto = req.DeserializeModel<ReservationDraftRequestDto>();
    
        var data = JsonConvert.SerializeObject(reservationDraftRequestDto);
        //more logic...
        return new OkResult();
    }
    public static T DeserializeModel<T>(this HttpRequest request)
    {
        using (var reader = new StreamReader(request.Body))
        using (var textReader = new JsonTextReader(reader))
        {
            request.Body.Seek(0, SeekOrigin.Begin);
            var serializer = JsonSerializer.Create(new JsonSerializerSettings()
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            });
            return serializer.Deserialize<T>(textReader);
        }
    }
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多