我正在使用Flurl(我最喜欢的API之一)来将表单数据发布到URL。我非常熟悉使用“JsonProperty”属性来命名键,并在C#中使用标准大小写。
但是当我使用PostUrlEncodedAsync时,正常的JsonProperty代码不会转换为“key”,而仍然是“KeyName”,导致调用失败。
我的调用失败了,因为它需要“key”,但是我发送的是“KeyName”。JsonProperty/DataMember属性过去一直有效,那么为什么会在这里失败呢?
当我解决这个问题时,似乎源于这个方法调用了DefaultUrlEncodedSerializer来进行序列化。这个序列化器忽略了JsonProperty名称。
例如,jsonEncodedContent使用
但是当我使用PostUrlEncodedAsync时,正常的JsonProperty代码不会转换为“key”,而仍然是“KeyName”,导致调用失败。
public class TokenTest
{
[JsonProperty("key")]
public string KeyName { get; set; }
}
我有点困惑,为什么这个不能直接使用。
var request = new TokenTest
{
KeyName = "ewr1-QuQ5jo88WfCpNPz2kTb8ES",
};
var result = await url.PostUrlEncodedAsync(request).ReceiveString();
我的调用失败了,因为它需要“key”,但是我发送的是“KeyName”。JsonProperty/DataMember属性过去一直有效,那么为什么会在这里失败呢?
当我解决这个问题时,似乎源于这个方法调用了DefaultUrlEncodedSerializer来进行序列化。这个序列化器忽略了JsonProperty名称。
var urlEncodedContent = new CapturedUrlEncodedContent(request.Settings.UrlEncodedSerializer.Serialize(token));
var jsonEncodedContent = new CapturedUrlEncodedContent(request.Settings.JsonSerializer.Serialize(token));
例如,jsonEncodedContent使用
JsonProperty
属性,而urlEncodedContent则忽略该属性。