将 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 请求类参数中的类的主要内容,如果未能解决你的问题,请参考以下文章
在映射数据流(Azure 数据工厂)内的表达式函数中创建动态 Json