You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建可接收指定JSON的C# Web API POST模型?

解决ASP.NET Core API接收特定JSON数据的模型创建问题

问题根源

你当前定义的ContentFormAnswerDto中,FormData字段被声明为string?类型,但请求JSON里的formData是嵌套的JSON对象而非字符串,导致JSON序列化器无法将对象解析为字符串,触发解析错误,进而引发整个DTO绑定失败(dto字段必填的错误是绑定失效后的连锁反应)。另外,WorkflowId字段设置了MinLength(36),但请求中该字段为空字符串,这也会触发验证错误。

解决方案

针对formData的动态键值对(键为带括号的UUID字符串,值可能是字符串或嵌套对象),可以选择以下适配方案:

方案1:用Dictionary<string, object>接收动态结构

将FormData定义为字典类型,自动映射formData里的所有键值对,嵌套对象会被解析为对应类型(System.Text.Json下为JsonElement,Newtonsoft.Json下为JObject):

public record ContentFormAnswerDto(
    [Required, MinLength(36), MaxLength(40)] string FormId,
    [MaxLength(40)] string? WorkflowId = null,
    string? Status = null,
    Dictionary<string, object>? FormData = null
);

方案2:用JsonElement保留原始JSON结构

如果不需要提前解析键值对,仅需接收完整的formData内容,可使用JsonElement类型:

public record ContentFormAnswerDto(
    [Required, MinLength(36), MaxLength(40)] string FormId,
    [MaxLength(40)] string? WorkflowId = null,
    string? Status = null,
    JsonElement? FormData = null
);

后续可通过JsonElement的API遍历、读取内部的键值对数据。

补充说明

  • 移除了WorkflowId的MinLength(36)约束,因为请求中该字段允许为空字符串,原约束会导致验证失败;
  • ASP.NET Core默认的System.Text.Json序列化器已支持上述两种类型的解析,无需额外配置。

内容的提问来源于stack exchange,提问作者Bheksta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 11:11:27