2014-01-15 20 views
1

我正在構建一個處理調查的應用程序,以供人們在C#環境中填寫。Newtonsoft Json解串器無法正常工作

當我正常運行應用程序時,一切正常,反序列化作品,序列化作品,一切正常。

當我發送調查時,一切都很順利。當我重新打開應用程序時,程序會自動向服務器發送請求以檢索可用的調查。但是當他試圖對json進行反序列化時,他發現他需要製作2個子對象,但是不能填充它們。

我查看了我是否得到的json是正確的,它是。問題似乎是反序列化不知道數據的去向(儘管他通常使用完全相同的方法)。

我得到的卻是:

  • 根:這是基本變量,爲空,直到它被填滿。所以我知道反序列化正在做一些事情。
  • newSurvey:創建者的反序列化,但沒有得到填補(保持空)
  • 結果:創建者的反序列化,但沒有得到填補(保持空)

的JSON看起來像這樣(請記住我不停的數據本身出來,這是一個精簡版):

{ 
"id": "data", 
"name": "data", 
"description": "data", 
"surveyVersion": "data", 
"welcomeMessage": "data", 
"exitMessage": "data", 
"anonymousAnswers": false, 
"publicationDate": "data", 
"expirationDate": "data", 
"serverInstanceName": "data", 
"documentVersion": "data", 
"questions": [ 
    { 
     "id": "data", 
     "position": 0, 
     "text": "data", 
     "answerRequired": true, 
     "dependsOn": null, 
     "dependencyType": null, 
     "dependencyParameter": null, 
     "choices": null, 
     "type": { 
      "name": "data", 
      "hasChoices": false, 
      "multipleAnswersPossible": false 
     }, 
     "defaultValue": null, 
     "openOption": null, 
     "maxOpenOption": null, 
     "maxCharacters": "data", 
     "minimumAnswers": null, 
     "maximumAnswers": null, 
     "answers": null, 
     "openAnswers": null 
    } 
]} 

我檢查使用http://jsonlint.com/的JSON,它是正確的,我還可以手動檢查數據,它包含了所有的數據我需要。

現在我不知道如何確保他如果不想這樣做會正常反序列化。如果我沒有發送調查,一切正常,只有在我發送調查並重新啓動應用程序後纔會發生。

代碼發生錯誤:

if (jSONSurvey != "") { 
      if (newSurveys != null) { 
       var root = JsonConvert.DeserializeObject<RootObject> (jSONSurvey); 
       if (root.newSurveys != null) 
        newSurveys = root.newSurveys; 
      } else { 
       newSurveys = new List<NewSurvey>(); 
       var root = JsonConvert.DeserializeObject<RootObject> (jSONSurvey); 
       if (root.newSurveys != null) 
        newSurveys = root.newSurveys; 
      } 

崩潰的部分是else語句。

+0

你有一個代碼示例,顯示錯誤來自哪裏? – northben

+0

你發佈的Json缺少一些'}'這是一個錯字嗎? – Liam

+0

事實上,它根本就是無效的json。 – Liam

回答

3

RootObject類結構看起來與提供的數據不匹配。

嘗試這樣的事情來調試,如果它是失敗的類或轉換。

var root = JsonConvert.DeserializeObject(jSONSurvey); 
Console.WriteLine(root.id); 

如果根對象中填充了數據,那麼你RootObject類的結構不允許的屬性。

+0

這確實讓我發現問題,歡呼。儘管JSON的主體是相同和正確的,但它錯過了身體本身之前的一些命名。 – user3198566