使用JSON.NET反序列化错误的数据结构

时间:2012-12-11 15:56:27

标签: c# json customization json.net

由于我无法控制的情况(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对其进行解码,理想情况下要将这些问题条目提取到键控结构中:问题[qnum] [optnum]。

我很好地处理多维数组,并且很好地使用RegEx根据需要将问题和选项分开,但我找不到足够的工作示例来让我开始编写自定义JSONConverter来包含代码。 / p>

到目前为止,我发现了以下内容(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函数以使它做普通的反序列化 - 我可以调整一下特殊情况...

1 个答案:

答案 0 :(得分:1)

这对我有用

var listofDicts = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(json);