2012-12-11 59 views
1

由於超出了我的控制(SurveyGizmo API),我要反序列化以下(樣品)格式保存的數據情況:反序列化錯誤的數據結構JSON.NET

// 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以包含代碼的工作示例。

到目前爲止,我已經找到了以下(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

您可能會發現這篇文章有幫助: http://stackoverflow.com/questions/8252176/json-net-deserializeobject-format – ADH

回答

1

這對我的作品

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

這並沒有真正回答這個問題:要點是JSON結構不好,所以使用你的代碼,我得到了'Dictionary '的'List',其中的鍵是像[[question(4),option(10053)]和'[question(4),option(10054) )],'。 自定義反序列化器的要點是獲取'Dictionary '的'List',其中一些對象本身就是多維結構。類似於: 'dict {[somekey] =>'somevalue',[question] => {[4] => {[10053] =>'ans1',[10054] =>'ans2'}}}' (對不起,代碼格式在註釋中不起作用) – almcnicoll