【问题标题】:POST request with JSON Body Serialization带有 JSON 正文序列化的 POST 请求
【发布时间】:2019-02-11 03:38:57
【问题描述】:

我有一个具体问题,我无法处理。

我正在使用 HTTP Get API 请求,我正在获取 JSON 字符串,我正在反序列化,这非常有效。但是,我只需要重用两对这个 JSON 文件,但需要将其粘贴为 POST 请求的 JSON 正文。让我给你看一个例子:

GET API 请求的输出:

{
  "message":{
      "value":[
         {
           "Reference":null,
           "Key":"abc",
           "IssueNumber":123
         },
         {
           "Reference":null,
           "Key":"def",
           "IssueNumber":345
         }
       ]
     }
   }

所以现在我能够反序列化这个 JSON 字符串(即:jsonString("value)(0)("Key"),我会得到 "abc")。

但是现在,我不知道如何序列化这个反序列化的对象以使用 ReviewStatus 和 Key。这个 POST 请求 JSON 正文如下所示:

{
   "newStatus":"New"
   "queueItems": [
     {
        "Key":"abc"
        "IssueNumber":123
     },
     {
        "Key":"def"
        "IssueNumber":456
     }
  ]
}

For 循环适用于我,但在这种情况下,我将对每个项目进行 API 调用,而不是只进行一次 POST API 调用。您认为最好的解决方案是什么?我试图使用 Newtonsoft.Json.JsonConvert (SerializeObject 方法),但它并没有像我预期的那样对我有用。我很确定,需要一些更简单的方法,但我需要你的帮助。

感谢您的任何建议。 弗兰蒂塞克

【问题讨论】:

    标签: c# json api json.net


    【解决方案1】:

    您可以尝试编写两个拆分物种模型,一个用于接收 JSON 模型,另一个用于响应 JSON 模型。

    接收模型

    public class Value
    {
        public object Reference { get; set; }
        public string Key { get; set; }
        public int IssueNumber { get; set; }
    }
    
    public class Message
    {
        public List<Value> value { get; set; }
    }
    
    public class ReciveModel
    {
        public Message message { get; set; }
    }
    

    响应模型

    public class QueueItem
    {
        public string Key { get; set; }
        public int IssueNumber { get; set; }
    }
    
    public class ResponseModel
    {
        public string newStatus { get; set; }
        public List<QueueItem> queueItems { get; set; }
    }
    

    接收您的 JSON 数据并反序列化为 ReciveModel 对象,然后让数据进入另一个实例 ResponseModel

    最后,您使用JsonConvert.SerializeObject 将实例序列化为 JSON 数据。

    var obj = JsonConvert.DeserializeObject<ReciveModel>(JsonData);
    var res = new ResponseModel() {
        newStatus = "New",
        queueItems = obj.message.value.Select(x => new QueueItem() {
            IssueNumber = x.IssueNumber,
            Key = x.Key
        }).ToList()
    };
    var jsonResult = JsonConvert.SerializeObject(res);
    

    结果

    {"newStatus":"New","queueItems":[{"Key":"abc","IssueNumber":123},{"Key":"def","IssueNumber":345}]}
    

    c# online

    注意

    有两种方法可以轻松创建模型。

    • 您可以在Visual Studio中使用Web Essentials,使用Edit > Paste special > paste JSON as class,可以更容易的了解Json和model的关系。

    • 如果您不能使用 Web Essentials,您可以使用 http://json2csharp.com/ online JSON to Model 类代替。

    您可以尝试使用这些模型来承载您的 JSON 格式。

    【讨论】:

    • 嘿D-Shih,非常感谢您的详细回答!这看起来很简单,你的笔记会让我的生活更轻松:)。我明天会试试,我希望它会起作用:)。谢谢。
    猜你喜欢
    • 2013-05-30
    • 1970-01-01
    • 2015-08-14
    • 2016-09-29
    • 2016-09-24
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    相关资源
    最近更新 更多