我正在构建一个应用程序来处理人们在C#环境中填写的调查。
当我正常运行应用程序时,一切正常,反序列化工作,序列化工作,一切正常。
当我发送调查时,一切都会好起来的。当我重新打开应用程序时,程序会自动向服务器发送请求以检索可用的调查。但当他试图反序列化json时,他发现他需要制作2个子对象但不填充它们。
我查看了我得到的json是否正确,确实如此。问题似乎是反序列化不知道数据必须去哪里(即使他通常使用完全相同的方法)。
我得到的是:
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 :(得分:3)
RootObject
类结构似乎与提供的数据不匹配。
尝试这样的事情来调试它是否是失败的类或转换。
var root = JsonConvert.DeserializeObject(jSONSurvey);
Console.WriteLine(root.id);
如果根对象填充了数据,则RootObject
类的结构不允许使用属性。