C# Newtonsoft JSON-在JArray中创建JArray
我试图使用Newtonsoft JSON API创建JSON数组,但它给了我错误。我想达到这样的结构C# Newtonsoft JSON-在JArray中创建JArray,c#,json,windows-phone-8,json.net,C#,Json,Windows Phone 8,Json.net,我试图使用Newtonsoft JSON API创建JSON数组,但它给了我错误。我想达到这样的结构 [ { "id":"26", "appsurvey":"1", "fk_curriculumid":"70", "status":"Completed", "lastaccessedon":"2014-06-20 09:18:54", "questions":[ {
[
{
"id":"26",
"appsurvey":"1",
"fk_curriculumid":"70",
"status":"Completed",
"lastaccessedon":"2014-06-20 09:18:54",
"questions":[
{
"feedback":"6",
"questionid":"1"
},
{
"feedback":"8",
"questionid":"2"
},
{
"feedback":"1",
"questionid":"3"
}
],
"fk_clientid":"24",
"learnerid":"260"
}
]
我想多次添加问题数组,但它给了我错误
无法将属性问题添加到Newtonsoft.Json.Linq.JObject。对象上已存在同名的属性。
这是我的密码:
JArray surveytrackingA = new JArray();
/*code to add
[
{"id":"26",
"appsurvey":"1",
"fk_curriculumid":"70",
"status":"Completed",
"lastaccessedon":"2014-06-20 09:18:54"}]
*/
for (int i = 0; i < surveytrackingA.Count; i++)
{
JObject surveytrackD = (JObject)surveytrackingA[i];
string queryOne = "select * from table101 where fk_curriculumid='"
+ surveytrackD["fk_curriculumid"].ToString()
+ "' and fk_surveyid='"
+ surveytrackD["appsurvey"].ToString() + "'";
JArray questionsA = new JArray();
using (var stmt = await App.localDB.PrepareStatementAsync(queryOne))
{
while (await stmt.StepAsync())
{
JObject questionD = new JObject();
questionD.Add("questionid", stmt.GetTextAt(5));
questionD.Add("feedback", stmt.GetTextAt(6));
questionsA.Add(questionD);
}
}
surveytrackD.Add("questions", questionsA); /*error occurred here when second question array is getting inserted in surveyTrackD*/
surveytrackingA.Add(surveytrackD);
}
您可以使用常规C#类实现相同的结果(JArray中的JArray),并最终序列化为JSon 我在网上贴了一个样品;下面是生成预期输出的代码片段:
var Surveys = new List<SurveytrackD>();
Surveys.Add( new SurveytrackD { id = "26", appsurvey = "1", fk_curriculumid = "70", status = "Completed", learnerid = "240" } );
Surveys.Add( new SurveytrackD { id = "27", appsurvey = "1", fk_curriculumid = "71", status = "Completed", learnerid = "241" });
foreach (var survey in Surveys)
{
survey.questions = new List<Question>();
survey.questions.Add(new Question { questionid = "1", feedback = "0" });
survey.questions.Add(new Question { questionid = "2", feedback = "1" });
}
var json = JsonConvert.SerializeObject(Surveys, Formatting.Indented);
Console.WriteLine(json);
在发布问题时,请注意设置代码的格式。我现在已经修复了这个问题,但是在发布之前使用预览来检查没有无意义的缩进等。此外,还应该使用参数化SQL。这当然不是问题的主题。你能把它简化成一个简短但完整的程序来演示这个问题吗?扔掉任何不需要的东西,硬编码任何你需要的数据。我看不出马上有什么问题,但如果我能自己动手修补的话,修复起来会容易得多。谢谢你的快速回复和纠正。我刚刚列出了我需要实现的结构和代码。但在添加相同数组(问题)时,我得到了错误。我只是想弄清楚我为什么要面对这个问题?正如我所说的,如果你花一些时间把你当前的代码转换成一个独立的程序,它演示了同样的失败,仅仅使用硬编码的数据,我们就可以更容易地找出问题所在。哦,告诉我们异常被抛出的位置。我怀疑是在
surveytrack.添加(“问题”,问题a)
但我们无法判断。循环开始时,surveytrackD中有什么?例如,它是否已经有了questions
属性?(如果是这样的话,那就可以解释了。)上面的json格式可以用来表示硬编码数据,它与我在Android中得到的json格式相同,与我在Windows Phone中实现的json格式相同。
var Surveys = new List<SurveytrackD>();
Surveys.Add( new SurveytrackD { id = "26", appsurvey = "1", fk_curriculumid = "70", status = "Completed", learnerid = "240" } );
Surveys.Add( new SurveytrackD { id = "27", appsurvey = "1", fk_curriculumid = "71", status = "Completed", learnerid = "241" });
foreach (var survey in Surveys)
{
survey.questions = new List<Question>();
survey.questions.Add(new Question { questionid = "1", feedback = "0" });
survey.questions.Add(new Question { questionid = "2", feedback = "1" });
}
var json = JsonConvert.SerializeObject(Surveys, Formatting.Indented);
Console.WriteLine(json);
[
{
"fk_clientid": null,
"learnerid": "240",
"appsurvey": "1",
"id": "26",
"fk_curriculumid": "70",
"status": "Completed",
"lastaccessedon": null,
"questions": [
{
"feedback": "0",
"questionid": "1"
},
{
"feedback": "1",
"questionid": "2"
}
]
},
{
"fk_clientid": null,
"learnerid": "241",
"appsurvey": "1",
"id": "27",
"fk_curriculumid": "71",
"status": "Completed",
"lastaccessedon": null,
"questions": [
{
"feedback": "0",
"questionid": "1"
},
{
"feedback": "1",
"questionid": "2"
}
]
}
]