使用存储过程在WebAPI中嵌套JSON?

时间:2016-07-08 14:50:44

标签: c# json

我只需要在Entity Framework中使用存储过程而不是Linq来生成嵌套的JSON。这是我想要创建的JSON

{
    "quiz" : [{
        "id" : 1,
        "name" :"Guess Fruit Color",
        "description": "You need to guess color of fruits",
        "questions" : [
            {"id" : 1000 , "quizId" : 1 , "description": "The color of apple is" , "options" : [
                          {"id" : 1 , "questionId" : 1000 , "description" : "Green", "correctAnswer" : false },
                          {"id" : 2 , "questionId" : 1000 , "description" : "Red",   "correctAnswer" : true },
                          {"id" : 3 , "questionId" : 1000 , "description" : "Pink",  "correctAnswer" : false },
                          {"id" : 4 , "questionId" : 1000 , "description" : "Purple", "correctAnswer": false }      
            ]
            },
            {"id" : 1001 , "quizId" : 1 , "description": "The color of mangoss is" , "options" : [
                          {"id" : 5 , "questionId" : 1001 , "description" : "Green", "correctAnswer" : false },
                          {"id" : 6 , "questionId" : 1001 , "description" : "Red",   "correctAnswer" : false },
                          {"id" : 6 , "questionId" : 1001 , "description" : "Yello", "correctAnswer" : true },
                          {"id" : 8 , "questionId" : 1001 , "description" : "Purple", "correctAnswer": false }      
            ]
            }      
        ]}
    ]
}

我的存储过程只是返回平面数据,我不知道如何将其转换为分层数据。

ALTER PROCEDURE GetQuizDetails
As
    SELECT 
            Quiz.Id,
            Quiz.name,
            Quiz.description,

            --Questions 
            Questions.Id,
            Questions.TriviaQuizId,
            Questions.description,

            --Options 
            Options.id,
            Options.questionId,
            Options.description,
            Options.correctAnswer



    FROM        
            dbo.TriviaQuizs as Quiz 
            JOIN dbo.TriviaQuestions as Questions on Quiz.id = Questions.TriviaQuizId
            JOIN dbo.TriviaOptions as Options on Options.questionId = Questions.Id

我设计了类似

的课程
public class TriviaQuiz
    {
        public int id { get; set; }
        public string name { get; set; }
        public string description { get; set; }

        //A Quiz can have many questions
        public virtual List<TriviaQuestion> questions { get; set; }
    }

public class TriviaQuestion
    {
        [Key(), ForeignKey("triviaQuiz")]
        public int id { get; set; }
        public string description { get; set; }

        //Navigation Property to set foreign key relationship
        [JsonIgnore]
        public virtual TriviaQuiz triviaQuiz { get; set; }

       //A question can have many options 
        public virtual List<TriviaOption> options { get; set; }
    }

public class TriviaOption
    {
        public int id { get; set; }
        [ForeignKey("triviaQuestion")]
        //Tell EF That questionId is a Foreign key to TriviaQuestion table
        public int questionId { get; set; }
        public string description { get; set; }
        public Boolean correctAnswer { get; set; }

        //Navigation Property to set up Foreign key relation ship
        [JsonIgnore]
        public virtual TriviaQuestion triviaQuestion { get; set; }
    }

任何帮助和指示将不胜感激。提前致谢

0 个答案:

没有答案