带有JSON主体序列化的POST请求

时间:2018-09-05 23:13:43

标签: c# json api json.net

我有一个特定的问题,我无法解决。

我正在使用HTTP Get API请求,并且正在获取JSON字符串,该字符串正在反序列化,因此效果很好。但是,然后,我只需要重用两对此JSON文件,但是需要将其粘贴为JSON主体以进行POST请求。让我向您展示示例:

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方法),但它对我不起作用。我敢肯定,需要做些简单的事,但是我需要您的帮助。

谢谢您的任何建议。 Frantisek

1 个答案:

答案 0 :(得分: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,使用“编辑”>“选择性粘贴”>将JSON粘贴为类,可以更轻松地了解Json与模型之间的关系。

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

您可以尝试使用这些模型来携带JSON格式。