将 JSON 对象映射到 Azure 函数 API 请求类参数中的类

Posted

技术标签:

【中文标题】将 JSON 对象映射到 Azure 函数 API 请求类参数中的类【英文标题】:Map JSON object to class in Azure Function API Request class parameter 【发布时间】: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

发送请求-

代码:

【问题讨论】:

【参考方案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);
    

结果:

【讨论】:

以上是关于将 JSON 对象映射到 Azure 函数 API 请求类参数中的类的主要内容,如果未能解决你的问题,请参考以下文章

使用 Rx 编程 Moya 将 JSON 响应映射到对象

在映射数据流(Azure 数据工厂)内的表达式函数中创建动态 Json

将 Json 响应中的对象列表映射到颤动中的列表

使用 Hyperolso Sync 将多级 JSON 对象映射到 NSManagedObject

将JSON映射到现有的pojo对象

如何将带有嵌套数组的 JSON 对象映射到打字稿模型中?