使用变量名数组反序列化 JSON
Deserialize JSON with variable name arrays
我收到 JSON 从 REST Web 服务返回的调查响应。它具有一些名称值对的名称部分的数组。此外,名称将根据所问问题的类型而变化。我正在使用 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
class 中的 fields
属性 更改为 Dictionary<string, object>
,然后用 [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; }
}
所有具有奇怪 属性 名称的字段将被放入字典中,您可以在其中正常访问它们。不需要额外的代码。
我收到 JSON 从 REST Web 服务返回的调查响应。它具有一些名称值对的名称部分的数组。此外,名称将根据所问问题的类型而变化。我正在使用 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
class 中的 fields
属性 更改为 Dictionary<string, object>
,然后用 [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; }
}
所有具有奇怪 属性 名称的字段将被放入字典中,您可以在其中正常访问它们。不需要额外的代码。