Newtonsoft Json反序列化器无法正常工作

时间:2014-01-15 14:47:16

标签: c# json json.net deserialization

我正在构建一个应用程序来处理人们在C#环境中填写的调查。

当我正常运行应用程序时,一切正常,反序列化工作,序列化工作,一切正常。

当我发送调查时,一切都会好起来的。当我重新打开应用程序时,程序会自动向服务器发送请求以检索可用的调查。但当他试图反序列化json时,他发现他需要制作2个子对象但不填充它们。

我查看了我得到的json是否正确,确实如此。问题似乎是反序列化不知道数据必须去哪里(即使他通常使用完全相同的方法)。

我得到的是:

  • root:这是基本变量,为null,直到它被填充。所以我知道deserialize正在做点什么。
  • 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语句。

1 个答案:

答案 0 :(得分:3)

RootObject类结构似乎与提供的数据不匹配。

尝试这样的事情来调试它是否是失败的类或转换。

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

如果根对象填充了数据,则RootObject类的结构不允许使用属性。