反序列化Json:使用数字标识符的自定义字段

时间:2018-10-01 05:42:54

标签: c# json rest

我正在与一个具有Restful API基础结构的供应商合作,该基础结构允许在某些实体上使用“自定义字段”。通过其界面在其实体之一上创建自定义字段时,将为该自定义实体命名。但是,在他们的API中,您尝试使用该自定义字段,它实际上是由一个int指定的(它表示该字段的唯一ID)。例如,您在实体上创建的第一个自定义字段的ID为1,这就是您从API访问或读取该字段的方式。

因此,在下面的Json响应示例中,您将看到在“ enrollment field”集合中返回了用于注册的自定义字段。 4是自定义字段的ID,而ABC123是该自定义字段中填充的值。

"enrollment_fields":{  
               "4":"ABC123"
            },

我不太确定如何在对象类中处理此问题。显然,我不能给对象成员一个数字作为名称。我该如何将这种类型的成员反序列化到对象中,以便可以读取值ABC123?

2 个答案:

答案 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;之类的命名空间。

输出:

enter image description here