【问题标题】:RestSharp list of non primitives contain all null values on deserializationRestSharp 非基元列表包含反序列化时的所有空值
【发布时间】:2014-04-10 11:47:47
【问题描述】:

我正在尝试通过 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 的两个不同实例导致它无法从一个转换为另一个?

【问题讨论】:

  • 测试this 问题,看看它是否能解决我的问题。

标签: c# entity-framework restsharp


【解决方案1】:

我设法通过一些小技巧让它工作。

第一个端点上的代码保持不变;奖励列表使用JsonConvert.SerializeObject(rewards) 进行序列化。

在第二个端点上,我将rewards 的类型定义为string 而不是List&lt;Reward&gt;。它显示为转义的 json 字符串。从那里,我明确地使用JsonConvert.DeserializeObject&lt;List&lt;Reward&gt;&gt;(rewards) 转换成列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多