FLURL: 映射属性名称

7

在执行ReceiveJson()时,是否有办法映射不匹配的属性名称?例如,JSON中的'user_name'应该映射到C#对象中的'UserName'。

List<Person> people = await _settings.Url
    .AppendPathSegment("people")
    .GetAsync()
    .ReceiveJson<List<Person>>();
1个回答

17

更新Flurl.Http 4.0及更高版本的答案:

从4.0开始(截至2022年6月预发布),Flurl.Http使用System.Text.Json进行序列化,因此其推荐的任何方法来自定义属性名称都可以与Flurl一起使用:

using System.Text.Json.Serialization;

public class Person
{
    [JsonPropertyName("user_name")]
    public string UserName { get; set; }
}

对于那些偏爱使用Json.NET的人,可以在4.0及以上版本中使用Json.NET序列化程序。如果是使用Flurl.Http 3.x或更早版本,则可以使用Newtonsoft Json.NET库的序列化属性,特别是JsonProperty属性:

using Newtonsoft.Json;

public class Person
{
    [JsonProperty("user_name")]
    public string UserName { get; set; }
}

嗨,托德,这对我不起作用。我正在使用“PostUrlEncodedAsync”和“ReceiveJson<MyClass>”。当我使用“[JsonProperty(“user_name”)]”时,该属性未填充。但是,如果我将属性命名为“user_name”,它就会被填充。 - c.lamont.dev
1
@c.lamont.dev 我已经更新了这个答案。 - Todd Menier
使用PostUrlEncodedAsync()时,是否可以自定义属性名称? (我已经尝试过DataContract / DataMember属性,但没有成功) - undefined
@Sascha 没有这样的情况。DataContract来自XML世界,而URL编码既不是XML也不是JSON,所以这些属性不起作用。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接