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

Blazor服务器端C#获取object参数属性报错的解决求助

解决Blazor服务器端从object参数获取属性值的问题

问题根源

  1. 编译错误CS1061:object是所有.NET类型的基类,编译阶段无法识别传入对象包含employeeID、departementCode这类自定义属性,直接访问会触发编译错误。
  2. 反射运行时错误:ASP.NET Core接收JSON请求且参数为object时,默认会将JSON反序列化为JsonElement(而非普通.NET对象)。JsonElement没有.NET属性,反射的GetProperties()方法找不到对应属性,因此抛出Sequence contains no matching element异常。

最优解决方案:使用强类型模型

这是最安全、易维护的方案,通过定义与请求JSON结构匹配的实体类,让框架自动完成类型转换:

1. 创建请求模型类

public class OwnerRequest
{
    public int employeeID { get; set; }
    public string departementCode { get; set; }
    // 可按需添加其他JSON字段对应的属性,如employeeName、jobCode等
}

如果JSON字段名和C#属性名大小写/拼写不一致,可通过JsonPropertyName特性映射:

using System.Text.Json.Serialization;

public class OwnerRequest
{
    [JsonPropertyName("employeeID")]
    public int EmployeeId { get; set; } // 用符合C#命名规范的属性名,映射JSON的employeeID

    [JsonPropertyName("departementCode")]
    public string DepartmentCode { get; set; }
}

2. 修改控制器方法参数类型

将方法参数从object改为OwnerRequest,直接访问属性即可:

[HttpPost]
public ActionResult AddOwnerFile(OwnerRequest owner)
{
    // 注意:employeeID是数字类型,根据数据库字段类型选择是否转字符串
    var ownerFileNo = owner.employeeID.ToString();
    var departementCode = owner.departementCode;

    // 使用参数化查询避免SQL注入,官方推荐使用@p0、@p1这类命名占位符
    var sql = "INSERT INTO Owner (OwnerFileNo, DepartementCode) VALUES (@p0, @p1)";
    var rowsAffected = _context.Database.ExecuteSqlRaw(sql, ownerFileNo, departementCode);

    return Ok();
}

备选方案:直接处理JsonElement(不推荐)

如果因特殊原因必须使用object参数,可判断对象类型为JsonElement后直接读取JSON节点:

[HttpPost]
public ActionResult AddOwnerFile(object owner)
{
    if (owner is not JsonElement jsonElement)
    {
        return BadRequest("无效的请求格式");
    }

    var employeeID = jsonElement.GetProperty("employeeID").GetInt32();
    var departementCode = jsonElement.GetProperty("departementCode").GetString();

    var sql = "INSERT INTO Owner (OwnerFileNo, DepartementCode) VALUES (@p0, @p1)";
    var rowsAffected = _context.Database.ExecuteSqlRaw(sql, employeeID.ToString(), departementCode);

    return Ok();
}

此方案缺乏类型安全,一旦JSON字段名拼写错误或类型变更,会触发运行时异常,仅适合临时场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:52:53