我有一个特定的问题,我无法解决。
我正在使用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
答案 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}]}
注意
有两种方法可以轻松地创建模型。
您可以在Visual Studio中使用Web Essentials,使用“编辑”>“选择性粘贴”>将JSON粘贴为类,可以更轻松地了解Json与模型之间的关系。
如果您不能使用Web Essentials,则可以代替使用http://json2csharp.com/在线JSON到Model类。
您可以尝试使用这些模型来携带JSON格式。