Shi*_*bbz 4 json camelcasing simplejson restsharp
我想在camelCase中发布JSON,并按照这里的说明操作:
https://github.com/restsharp/RestSharp/wiki/Deserialization#overriding-jsonserializationstrategy
public class CamelCaseSerializerStrategy : PocoJsonSerializerStrategy
{
protected override string MapClrMemberNameToJsonFieldName(string clrPropertyName)
{
return char.ToLower(clrPropertyName[0]) + clrPropertyName.Substring(1);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我用这段代码创建一个新的客户端:
var client = new RestClient(_baseUrl);
SimpleJson.CurrentJsonSerializerStrategy = new CamelCaseSerializerStrategy();
Run Code Online (Sandbox Code Playgroud)
但是,在发出请求时,串行器未激活.RestSharp文档遍布整个地方,并且大部分都是错误的.查看源代码(RestRequest.AddBody),看起来根本不使用SerializerStrategy.
我一直在寻找一种在客户端级别进行此更改的方法,或者在不需要修改每个请求的地方.
我见过这个博客 - 也许这是唯一的方法.如果您只能在请求级别更改序列化策略,这似乎是RestSharp的一大步.
我遇到了同样的问题.幸运的是,我设法按照此处提供的说明解决了这个问题.
基本上,对于每个请求,您必须设置JsonSerializer为NewtonsoftJsonSerializer.例:
var request = new RestRequest();
request.JsonSerializer = new NewtonsoftJsonSerializer();
Run Code Online (Sandbox Code Playgroud)
以下来源NewtonsoftJsonSerializer:
public NewtonsoftJsonSerializer()
{
ContentType = "application/json";
_serializer = new JsonSerializer
{
MissingMemberHandling = MissingMemberHandling.Ignore,
NullValueHandling = NullValueHandling.Include,
DefaultValueHandling = DefaultValueHandling.Include
};
}
public NewtonsoftJsonSerializer(JsonSerializer serializer)
{
ContentType = "application/json";
_serializer = serializer;
}
public string Serialize(object obj)
{
using (var stringWriter = new StringWriter())
{
using (var jsonTextWriter = new JsonTextWriter(stringWriter))
{
jsonTextWriter.Formatting = Formatting.Indented;
jsonTextWriter.QuoteChar = '"';
_serializer.Serialize(jsonTextWriter, obj);
var result = stringWriter.ToString();
return result;
}
}
}
public string DateFormat { get; set; }
public string RootElement { get; set; }
public string Namespace { get; set; }
public string ContentType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
希望它能解决你的问题!
小智 6
RestSharp.Serializers.NewtonsoftJson
dotnet 添加包 RestSharp.Serializers.NewtonsoftJson
或者
然后
using RestSharp.Serializers.NewtonsoftJson;
...
public myRestSharpMethod() {
...
var client = new RestClient(url);
client.UseNewtonsoftJson();
// code continues..
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
小智 0
顺序似乎并不重要。我正在尝试做类似的事情,但没有任何快乐。
奇怪的是,您无法在更全局的级别上覆盖序列化器和反序列化器(也许通过配置),而不必为 RestRequest 对象敲出某种包装器。必须根据每个请求进行设置(特别是当您执行大量请求时)似乎只是自找麻烦。
| 归档时间: |
|
| 查看次数: |
5753 次 |
| 最近记录: |