我正在与一个具有Restful API基础结构的供应商合作,该基础结构允许在某些实体上使用“自定义字段”。通过其界面在其实体之一上创建自定义字段时,将为该自定义实体命名。但是,在他们的API中,您尝试使用该自定义字段,它实际上是由一个int指定的(它表示该字段的唯一ID)。例如,您在实体上创建的第一个自定义字段的ID为1,这就是您从API访问或读取该字段的方式。
因此,在下面的Json响应示例中,您将看到在“ enrollment field”集合中返回了用于注册的自定义字段。 4是自定义字段的ID,而ABC123是该自定义字段中填充的值。
"enrollment_fields":{
"4":"ABC123"
},
我不太确定如何在对象类中处理此问题。显然,我不能给对象成员一个数字作为名称。我该如何将这种类型的成员反序列化到对象中,以便可以读取值ABC123?
答案 0 :(得分:2)
由于C#中的对象不能具有数字属性,因此可以使用两种方法
如果密钥不会更改:
[JsonProperty(PropertyName = "4")]
public String Four { get; set; }
否则,您可以使用Dictionary<string, string>
。
答案 1 :(得分:0)
在这里,我创建一个示例控制台应用程序用于演示。
class Program
{
static void Main(string[] args)
{
//This is your sample json that comes from Rest API
string json = @"
{'enrollment_fields':{
'4':'ABC123',
'5': 'XYZ123',
'6': 'PQR123'
}
}";
//Deserialize your json into Dictionary of dictionary.
var obj = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(json);
//Get your desired key from outer dictionary
var enrollment_fields = obj["enrollment_fields"];
//Loop on inner dictionary key to get values
foreach (string key in enrollment_fields.Keys)
//Here you get your dynamic key. e.g. 4,5,6
Console.WriteLine(key + ": " + enrollment_fields[key]);
Console.ReadLine();
}
}
注意:下载Newtonsoft.json
表格Nuget Package Manager
,并在程序中使用using Newtonsoft.Json;
之类的命名空间。
输出: