其他分享
首页 > 其他分享> > 变量名数组反序列化JSON

变量名数组反序列化JSON

作者:互联网

我正在从REST Web服务返回的JSON用于调查响应.它具有一些名称值对的名称部分的数组.此外,名称将根据询问问题的类型而变化.我正在使用JSON.net并尝试将返回的值反序列化为某种类型的对象树,我可以走,但是无法弄清楚要使用哪种结构来填充它.

我在LinqPad中测试了以下代码段,并且字段始终为空.是否可以通过某种方式轻松读取变量数据,还是必须在代码中对其进行解析?

void Main() {
    string json = @"{
      'result_ok':true,
      'total_count':'51',
      'data':[{
        'id':'1',
        'status':'Deleted',
        'datesubmitted':'2015-01-12 10:43:47',
        '[question(3)]':'Red',
        '[question(4)]':'Blue',
        '[question(18)]':12,
        '[variable(\'STANDARD_IP\')]':'127.0.0.1',
        '[variable(\'STANDARD_GEOCOUNTRY\')]':'United States'
      }]
    }";
    var responses = JsonConvert.DeserializeObject<RootObject>(json);
    responses.Dump();
}

public class RootObject {
    public bool result_ok { get; set; }
    public string total_count { get; set; }
    public List<Response> data { get; set; }
}

public class Response {
    public string id { get; set; }
    public string status { get; set; }
    public string datesubmitted { get; set; }
    public List<object> fields = new List<object>();
}

解决方法:

将Response类中的fields属性更改为Dictionary< string,object&gt ;,然后用[JsonExtensionData]属性标记它,如下所示:

public class Response
{
    public string id { get; set; }
    public string status { get; set; }
    public string datesubmitted { get; set; }
    [JsonExtensionData]
    public Dictionary<string, object> fields { get; set; }
}

然后,所有具有奇怪属性名称的字段都将放入字典中,您可以在其中正常访问它们.不需要额外的代码.

这是一个演示:https://dotnetfiddle.net/1rQUXT

标签:json-deserialization,json-net,json,c
来源: https://codeday.me/bug/20191120/2046964.html