不完美的Tuple
C#新增的Tuple有时候挺好用的,不用定义太多的数据类,比如:
(int age,string name ) GetUserInfo(){
return (20,"Jack");
}
但是!当你想在Asp.net里将此Tuple返回给客户端的时候,会发现返回的是一个空的数据!
{}
这是因为Tuple数据实际上是由"字段"组成的,而不是"属性",默认的,Asp.net 只序列化属性.
我们可以改下配置,让Asp.net也序列化"字段"
services.AddControllers()
.AddJsonOptions(options => {
options.JsonSerializerOptions.IncludeFields = true;
});
问题又来了,这样序列化出来的数据是这样的
{
"Item1":20,
"Item2":"Jack"
}
并没有将我们想要的字段名序列化出来...
可以加上更复杂的自定义命名解析,参考 https://stackoverflow.com/questions/45932003/make-names-of-named-tuples-appear-in-serialized-json-responses ,但是感觉太过于复杂了...
最终放弃了在需要序列化的时候使用Tuple,改成自定义record.
希望哪天能够默认正确的序列化,而不是需要Hack