gpt4 book ai didi

c# - Flurl 的 PostUrlEncodedAsync 忽略 JsonProperty 名称

转载 作者:行者123 更新时间:2023-11-30 16:38:45 25 4
gpt4 key购买 nike

我正在使用 Flurl(我最喜欢的 API 之一)将表单数据发布到 url。我非常熟悉使用“JsonProperty”属性来命名键,并使用 c# 的标准大小写。

但是当我使用 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 忽略该属性。

最佳答案

JsonProperty,顾名思义,就是和JSON序列化相关的。它实际上是一个 Json.NET 功能;它与 Flurl 一起工作的事实只是 Flurl 在其默认 JSON 序列化程序中使用 Json.NET 这一事实的一个方便结果。但我认为期望名为 JsonProperty 的东西与 URL 编码一起工作是不合理的,因为 URL 编码与 JSON 无关。

你可以很容易地通过投影到一个匿名对象上来解决这个问题:

url.PostUrlEncodedAsync(new { key = token.KeyName });

不是那么干净或类型安全,但我一直认为这是可以接受的,因为平均而言,URL 编码数据往往比 JSON 有效负载更小/更平坦/更简单。

关于c# - Flurl 的 PostUrlEncodedAsync 忽略 JsonProperty 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54462684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com