我正在C#环境中构建一个处理调查的应用程序。
当我正常运行应用程序时,一切正常,反序列化正常,序列化正常,一切正常。
当我发送调查时,一切都会恢复正常。当我重新打开应用程序时,程序会自动向服务器发送一个请求,以检索可用的调查。但当他试图反序列化json时,他发现他需要创建2个子对象,但没有填充它们。
我检查了一下我得到的json是否正确。问题似乎是反序列化程序不知道数据必须去哪里(尽管他通常使用完全相同的方法)。
相反,我得到的是:
- root:这是基变量,在填充之前为null。所以我知道反序列化正在做一些事情
- newSurvey:由反序列化创建,但未填充(保持为null)
- 结果:由反序列化创建,但未填充(保持为null)
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/而且它是正确的,我还手动检查了数据,它包含了我需要的所有数据。
现在我不知道如果他不想这样做,我该如何确保他正常反序列化。如果我没有发送调查,一切都很好,只有在我发送调查并重新启动应用程序后才会发生这种情况。
发生错误的代码:
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语句。
RootObject
类结构似乎与提供的数据不匹配。
如果是类或转换失败,请尝试类似的方法进行调试。
var root = JsonConvert.DeserializeObject(jSONSurvey);
Console.WriteLine(root.id);
如果根对象中填充了数据,则RootObject
类的结构不允许使用这些属性。