我正在尝试通过 RestSharp 请求序列化列表。我得到了列表中返回的正确数量的项目,但它们的值都是空白的。我已经在 JsonConvert 上尝试了很多不同的 Json 注释尝试,但这是我最接近的工作。
public string updateRewards(List<Reward> rewards)
{
RestRequest request = new RestRequest(updateRewardsUrl, Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddParameter("rewards", JsonConvert.SerializeObject(rewards));
RestResponse response = (RestResponse)client.Execute(request);
...
}
[JsonObject]
public class Reward
{
[JsonProperty("id")]
public int id { get; set; }
[JsonProperty("reward")]
public string reward { get; set; }
[JsonProperty("title")]
public string title { get; set; }
}
在另一个端点上...
public object Post(UpdateRewardsRequestDTO updateRewardsRequest)
{
...handle request...
}
[Route("/Rewards/updateRewards", "POST")]
public class UpdateRewardsRequestDTO : IReturn<UpdateRewardsResponseDTO>
{
public List<Reward> rewards { get; set; } //different Reward class, but exact same code as above
}
示例 RestRequest 参数
- System.Collections.Generic.List<RestSharp.Parameter>
+ [0] {rewards=[{"id":0,"reward":"test","title":"test2"}]} RestSharp.Parameter
在其他终结点上收到的示例请求
- updateRewardsRequest
- rewards Count = 1
- [0]
id 0 int
reward null string
title null string
问题可能是两个不同的Reward
实例导致它无法从一个转换为另一个吗?
我设法通过一点技巧让它工作。
第一个端点上的代码保持不变;奖励列表使用 JsonConvert.SerializeObject(rewards)
进行序列化。
在第二个端点上,我将rewards
的类型定义为string
而不是List<Reward>
。它显示为转义的 json 字符串。从那里,我显式使用JsonConvert.DeserializeObject<List<Reward>>(rewards)
转换为列表。