Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Newtonsoft JSON-在JArray中创建JArray_C#_Json_Windows Phone 8_Json.net - Fatal编程技术网

C# Newtonsoft JSON-在JArray中创建JArray

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":[ {

我试图使用Newtonsoft JSON API创建JSON数组,但它给了我错误。我想达到这样的结构

[

    {
        "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"
      }
    ]
  }
]