由于我无法控制的情况(SurveyGizmo API),我必须反序列化以以下(示例)格式保存的数据:
// Data in JSON format as produced by API
[{
"id": "2",
"contact_id": "",
"status": "Deleted",
"is_test_data": "1",
"datesubmitted": "2012-11-12 08:41:49",
"sResponseComment": "",
"[question(3)]": "fsdfsd",
"[question(4), option(10001)]": "",
"[question(4), option(10002)]": "Some answer",
"[question(5), option(10008)]": "",
"[question(5), option(10009)]": "Other administrative role"
},{
etc.
}]
我正在使用 JSON.Net 来解码它,理想情况下,希望将这些问题条目提取到一个键控结构中:question[qnum][optnum]。
我可以使用多维数组,并且可以使用 RegEx 根据需要将问题和选项分开,但我找不到足以让我开始编写自定义 JSONConverter 来包含代码的工作示例。
到目前为止,我发现了以下内容(ISurveyObject 约束我将反序列化的类型,并指定某些公共属性)
class SurveyGizmoJsonArrayConverter<T> : Newtonsoft.Json.Converters.CustomCreationConverter<T[]> where T : ISurveyObject
{
public override T[] Create(Type objectType)
{
List<T> retArr = new List<T>();
return retArr.ToArray();
}
public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
{
// What goes here? I can't seem to find working examples...
}
}
任何人都可以提供任何帮助或代码示例吗?
我想也许最有用的代码片段是我需要放入 ReadJson 函数以使其执行普通的香草反序列化 - 然后我可以针对特殊情况进行调整......
我有用
var listofDicts = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(json);