RestSharp RestRequest.AddBody不使用Newton.Json属性

Rya*_*sch 8 c# restsharp

var obj = new MyObject();
Run Code Online (Sandbox Code Playgroud)

我遇到RestSharp的问题RestRequest.AddBody(obj); 正确序列化对象.

class MyObject
{
   [JsonProperty(PropertyName="a")]
   public A{get;set;}

   [JsonProperty(PropertyName="b")]
   public B{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

问题是AddBody序列化器没有考虑我的JsonProperty属性,我似乎可以弄清楚如何在RestRequest或RestClient上设置序列化器?

Rya*_*sch 5

我发现以下链接解决了缺少属性支持RestSharp反序列化的问题

覆盖默认的序列化程序

使用XML或JSON请求主体发出请求时,您可以指定自己要使用的ISerializer实现.

var request = new RestRequest();
request.RequestFormat = RequestFormat.Xml;
request.XmlSerializer = new SuperXmlSerializer(); // implements ISerializer
request.AddBody(person); // object serialized to XML using your custom serializer;
Run Code Online (Sandbox Code Playgroud)

并实现了以下类来覆盖默认的JsonSerializer New Json Serializer


pri*_*e_z 5

我用了tafaju的答案,并像这样实现了json的序列化器。

public class CustomJsonSerializer : ISerializer
{
    public CustomJsonSerializer()
    {
        ContentType = "application/json";
    }

    public string Serialize(object obj)
    {
        return JsonConvert.SerializeObject(obj);
    }

    public string RootElement { get; set; }

    public string Namespace { get; set; }

    public string DateFormat { get; set; }

    public string ContentType { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

它对我来说效果很好,它读取属性并正确序列化所有类型。但是我没有对所有类型进行测试。文档说RootElement,Namespace和DateFormat不用于json。