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
相关产品推荐
相关产品推荐

