非原语的 RestSharp 列表包含反序列化时的所有空值



我正在尝试通过 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)转换为列表。

最新更新