不完美的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