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

JIRA SDK C# CustomField自定义字段赋值后无法保存问题求助

自定义字段Value属性赋值不生效解决方案

问题根因及对应修复方案

  • 自定义字段类型不匹配
    你当前手动将修改后的对象序列化为JSON字符串再赋值,绝大多数Jira相关的操作SDK会自动处理对象类型自定义字段的序列化逻辑,你传入字符串会被识别为和字段要求的结构不匹配,底层赋值逻辑会直接静默忽略非法值,无需手动序列化,直接将修改后的myDeserializedClass对象赋值给Value属性即可。
  • 索引器返回值为拷贝而非引用
    部分版本的SDK中issue["Bramki"]索引器返回的是自定义字段的拷贝对象,对拷贝对象的Value赋值不会同步到issue实例的实际字段值中,建议改用直接遍历CustomFields集合获取字段引用的写法:
    var bramkiField = issue.CustomFields.FirstOrDefault(f => f.Name.Equals("Bramki", StringComparison.OrdinalIgnoreCase));
    
  • 异步方法写法错误
    你当前的方法声明为async void,该写法仅支持事件处理器场景,普通异步方法请改为async Task,否则会出现异步上下文异常,可能导致SaveChangesAsync还未完成提交逻辑,方法就已经被回收退出,修改没有实际提交。
  • 权限不足静默失败
    确认你使用的API凭证对该项目的该自定义字段有编辑权限,权限不足时大部分SDK不会抛出显式异常,只会忽略对应字段的更新操作。

修复后完整代码示例

// 方法返回值从async void改为async Task
public async Task DoSomething(string issueNumber){
    var issue = await inner_client.Issues.GetIssueAsync(issueNumber); 

    // 直接获取字段引用
    var bramkiField = issue.CustomFields.First(f => f.Name == "Bramki");
    Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(bramkiField.Value?.ToString() ?? string.Empty);
    
    // 修改myDeserializedClass的业务逻辑
    // ...
    
    // 直接赋值修改后的对象,不要手动序列化
    bramkiField.Value = myDeserializedClass; 
    var test = bramkiField.Value; // 此时可验证值已正常更新

    await issue.SaveChangesAsync(); 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:51:00