1

私の手に負えない状況 (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 関数に入れる必要があるものだと思います。その後、特別な場合に合わせて微調整できます...

4

1 に答える 1

1

これは私のために働く

var listofDicts = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(json);
于 2012-12-11T16:39:16.907 に答える