繁体   English   中英

如何在Web API中使用FromData接收Dictionary中的JSON数据?

[英]How to receive JSON data in Dictionary using FromData in Web api?

以下是客户端将发送到名为“ GetQuestion”的API的JSON示例

 {
                 "lstQuestions": [{
                    "QuestionCategory": 1,
                    "QuestionText": "what is m in mvc",
                    "OptionA": "model",
                     "OptionB": "view", 
                     "OptionC": "controller", 
                     "OptionD": "razor",
                    "CorrectOption": "A"
                },
                {
                    "QuestionCategory": 2,
                    "QuestionText": "How are you",
                    "OptionA": "fine",
                     "OptionB": "not fine", 
                     "OptionC": "ok", 
                     "OptionD": "not ok",
                    "CorrectOption": "A"
                }],
               "Status" : 1

          }

以下是我的控制器API代码:

 public class QuestionDetails
    {
        public List<Questions> lstQuestions { get; set; }
        public int Status { get; set; }
    }
    public class Questions
    {
        public string QuestionCategory { get; set; }
        public string QuestionText { get; set; }
        public string OptionA { get; set; }
        public string OptionB { get; set; }
        public string OptionC { get; set; }
        public string OptionD { get; set; }
        public string CorrectOption { get; set; }

    }

    [Route("GetQuestions")]
    [HttpPost]
    public HttpResponseMessage SendQuestionDetails([FromBody] QuestionDetails UserDetailInput)
    {

        HttpResponseMessage mesage = Request.CreateResponse(HttpStatusCode.OK, "Demo"); ;
        if (ModelState.IsValid)
        {
            //in progress
        }
        return mesage;

    }

我想做的是如何使用Dictionary创建一个类并作为参数传递,我不想使用List,因为List和沉重的字典比List快得多。

例如:

  public class QuestionDetails
    {
        public Dictionary<string, Questions> lstQuestions { get; set; }
        public int Status { get; set; }
    } 
public HttpResponseMessage SendQuestionDetails([FromBody] Dictionary<string, QuestionDetails> UserDetailInput)
    {

        HttpResponseMessage mesage = Request.CreateResponse(HttpStatusCode.OK, "Demo"); ;
        if (ModelState.IsValid)
        {
            //in progress
        }
        return mesage;

    }

不知道您在使用Dictionary谈论什么比List快得多,但是您只需将JSON发送为

{
    "A": {
        "lstQuestions": {
            "A": {
                "QuestionCategory": 1,
                "QuestionText": "what is m in mvc",
                "OptionA": "model",
                "OptionB": "view",
                "OptionC": "controller",
                "OptionD": "razor",
                "CorrectOption": "A"
            },
            "V": {
                "QuestionCategory": 2,
                "QuestionText": "How are you",
                "OptionA": "fine",
                "OptionB": "not fine",
                "OptionC": "ok",
                "OptionD": "not ok",
                "CorrectOption": "A"
            }
        },
        "Status": 1
    }
}

希望下面的代码能清除您的查询。

   public HttpResponseMessage SendQuestionDetails([FromBody] Dictionary<string, QuestionDetails> UserDetailInput)
        {
   List<Questions> list = new List<Questions> { };
            list.Add(new Questions
            {
                CorrectOption = "CorrectOption1",
                OptionA = "OptionA1",
                OptionB = "OptionB1",
                OptionC = "OptionC1",
                OptionD = "OptionD1",
                QuestionCategory = "QuestionCategory1",
                QuestionText = "QuestionText1"
            });
            list.Add(new Questions
            {
                CorrectOption = "CorrectOption2",
                OptionA = "OptionA2",
                OptionB = "OptionB2",
                OptionC = "OptionC2",
                OptionD = "OptionD2",
                QuestionCategory = "QuestionCategory2",
                QuestionText = "QuestionText2"
            });

            Dictionary<QuestionDetails, int> dictionary = new Dictionary<QuestionDetails, int> { };
            QuestionDetails detail = new QuestionDetails { lstQuestions = list, Status = 1 };

            HttpResponseMessage mesage = Request.CreateResponse(HttpStatusCode.OK, detail);
            return mesage;
    return mesage;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM