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

标签: none