gpt4 book ai didi

c# - 将 Json.net 与 Jira 的自定义字段一起使用

转载 作者:行者123 更新时间:2023-11-30 16:12:20 27 4
gpt4 key购买 nike

要使用 json.net 将对象序列化为 json,我需要创建 POCO,并为每个 json 属性标记属性:

public class Priority
{
[JsonProperty("id")]
public string Id { get; set; }

[JsonProperty("name")]
public string Name { get; set; }

[JsonProperty("iconUrl")]
public string IconUrl { get; set; }
}

我正在使用它与 Jira 的 REST API 交互,它适用于所有标准字段。不幸的是,自定义字段是出问题的地方。自定义字段没有确定的字段名称,而是分配给它们的编号。因此,如果我有一个“Resolution Type”自定义字段,该属性将不会被称为“ResolutionType”,而是“customfield_10200”。

我正在处理具有相同自定义字段的多个部署,但它们都有不同的字段 ID。我喜欢做的是这样的:

[JsonProperty(ConfigurationManager.AppSettings["JiraResolutionTypeId"])]
public string ResolutionType{ get; set; }

但是你只能在这样的属性中有编译时常量,所以我不能以那种方式动态设置 id。

我该如何解决这个问题?

最佳答案

使用 custom contract resolver应该让你很容易做到这一点。添加您自己的 Attribute 类可以让您以通用的方式完成。

// add attribute so this only targets properties, or whatever you want
public class JiraAttribute : Attribute
{
public string LookupId { get; private set; }
public JiraAttribute(string lookupId)
{
this.LookupId = lookupId;
}
}
public class JiraContractResolver : DefaultContractResolver
{
public static readonly JiraContractResolver Instance = new JiraContractResolver();

protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);

var attr = member.GetCustomAttributes(typeof(JiraAttribute), true).Cast<JiraAttribute>().ToList();
if (attr != null && attr.Count > 0)
{
property.PropertyName = ConfigurationManager.AppSettings[attr[0].LookupId];
}

return property;
}
}

// in a class
[Jira("JiraResolutionTypeId")]
public string ResolutionType { get; set; }

//e.g.
// ConfigurationManager.AppSettings["JiraResolutionTypeId"] == "customfield_10200"
var settings = new JsonSerializerSettings { ContractResolver = JiraContractResolver.Instance };
var s = JsonConvert.SerializeObject(new Priority { Id = "123", ResolutionType = "abc" }, settings);
// {"id":"123","name":null,"iconUrl":null,"customfield_10200":"abc"}
var d = JsonConvert.DeserializeObject<Priority>(s, settings);
// d.ResolutionType == "abc"

关于c# - 将 Json.net 与 Jira 的自定义字段一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23142796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com