C#如何反序列化Azure Devops API返回的含variables字段的变量组数据
C# 反序列化Azure DevOps变量组动态variables字段方案
推荐方案:强类型字典映射(性能最高,有编译时校验)
variables字段是动态key的JSON对象,完全可以用Dictionary<string, T>来匹配,你只需要补充一个变量项的类即可:
- 定义变量项结构
// 对应variables下每个key的对象结构,可根据实际返回字段扩展 public class VariableItem { public string value { get; set; } // 若需支持机密变量,可补充可选字段 // public bool? isSecret { get; set; } }
- 修改自定义类的variables属性
public class AzureVariableGroup { // 注意返回的id是数值类型,也可保留为string,序列化器会自动兼容转换 public int id { get; set; } public string type { get; set; } public Dictionary<string, VariableItem> variables { get; set; } }
- 直接反序列化即可
以常用的两种序列化库为例:
- System.Text.Json 示例
using System.Text.Json; var variableGroup = JsonSerializer.Deserialize<AzureVariableGroup>(yourJsonString); // 取值示例:获取key1对应的值 string key1Value = variableGroup.variables["key1"].value; // 遍历所有变量示例 foreach(var (key, item) in variableGroup.variables) { Console.WriteLine($"变量名:{key},值:{item.value}"); }
- Newtonsoft.Json 示例
using Newtonsoft.Json; var variableGroup = JsonConvert.DeserializeObject<AzureVariableGroup>(yourJsonString);
轻量方案:嵌套字典(无需额外定义类)
如果不想单独定义VariableItem类,也可以直接用嵌套字典匹配结构:
public class AzureVariableGroup { public int id { get; set; } public string type { get; set; } public Dictionary<string, Dictionary<string, string>> variables { get; set; } } // 取值示例 string key1Value = variableGroup.variables["key1"]["value"];
注意事项
- 若variables字段可能为空/不存在,可给属性加
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)](System.Text.Json)或[JsonProperty(NullValueHandling = NullValueHandling.Ignore)](Newtonsoft.Json)避免反序列化报错 - 机密变量的value字段不会在接口返回中出现,若有需要可以在VariableItem中补充isSecret字段判断是否为机密变量
内容的提问来源于stack exchange,提问作者NiranjanKC
相关产品推荐
相关产品推荐

