【问题标题】:How to receive JSON data in Dictionary using FromData in Web api?如何在 Web api 中使用 FromData 在 Dictionary 中接收 JSON 数据?
【发布时间】:2017-07-12 09:30:42
【问题描述】:

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

 {
                 "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,因为它很重,而且 Dictionary 比 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;

    }

【问题讨论】:

    标签: c# asp.net-mvc list dictionary asp.net-web-api


    【解决方案1】:

    不知道你在说什么,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
        }
    }
    

    【讨论】:

    • 我没有传递数据。第三方向我发送 JSON,我无法修改数据。我的问题是关于 C# 而不是 JSON 。如何使用 Dictionary 而不是 List ?
    • @Nik 那么你的问题没有意义。你打算用什么作为字典中的键?如果您在数组中使用索引,您只是在创建一个简单的数组,并且使用字典的所有操作都比内存数组慢得多。
    【解决方案2】:

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

       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;
        }
    

    【讨论】:

    • 不明白你在这里尝试做什么?
    • 只需提供返回所需json格式的代码即可。
    • 他的问题不好,但你回答只是返回一个细节对象和Dictionary&lt;QuestionDetails, int&gt; dictionary = new Dictionary&lt;QuestionDetails, int&gt; { };从未使用过。
    • 兄弟,这是编码方式,也是我的风格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多