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

如何在C#的POST字段中仅传入JSON对象并存入MongoDB?

解决方法

方法一:直接修改Data字段类型

把object类型改成Dictionary<string, object>,这样只能接收键值对结构的JSON对象,字符串类型的请求会直接在模型绑定阶段失败,根本到不了存入MongoDB的环节。

修改后的模型类:

public class Products
{
    [Required]
    public string Id { get; set; }
    [Required]
    public Dictionary<string, object> Data { get; set; }
    [Required]
    public bool Valid { get; set; }
}

当请求里的Data是字符串时,ASP.NET Core的模型绑定会自动识别类型不匹配,返回400 Bad Request,不会执行后续的插入逻辑。

方法二:自定义验证属性(保留object类型的场景)

如果必须保留object类型,可以自定义一个验证属性,校验Data的值不是字符串类型。

先编写自定义验证类:

using System.ComponentModel.DataAnnotations;

public class NotStringAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value is string)
        {
            return new ValidationResult("Data字段不能是字符串类型,必须是JSON对象");
        }
        return ValidationResult.Success;
    }
}

然后将这个属性加到Data字段上:

public class Products
{
    [Required]
    public string Id { get; set; }
    [Required]
    [NotString]
    public object Data { get; set; }
    [Required]
    public bool Valid { get; set; }
}

这样在模型校验阶段,如果Data是字符串,就会抛出验证错误,阻止数据存入MongoDB。

额外说明

如果使用MongoDB Driver,上述两种方法最终存入MongoDB的数据结构,都会和原本存储JSON对象的效果一致,不会影响后续的查询与使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:35:15