• C# 如何定义一个带泛型属性的返回类型类 ,用来做统一的后端数据返回格式


    一、简单诉求:

      1、请求成功、失败标识:Code

      2、请求结果说明:Message

      3、返回数据:Data

    二、简单诉求分析:

      1、诉求前两条没什么好说的

      2、针对诉求3,实际上需要根据不同的返回数据才能确定数据类型,因此我们想到采用泛型

    三、话不多说,直接上代码

    CommonServiceResponse.cs

    using System;
    
    namespace Awing.IBMS.MyServiceResponse
    {
        /// <summary>
        /// 数据类型转换  data.ToCommonServiceResponse("成功!")
        /// </summary>
        public static class CommonServiceResponseEX
        {
            public static CommonServiceResponse<T> ToCommonServiceResponse<T>(this T data,string message="") where T:class
            {
                return CommonServiceResponse<T>.Success(message, data);
            }
        }
        /// <summary>
        /// 返回类
        /// </summary>
        /// <typeparam name="T"></typeparam>
         public  class CommonServiceResponse<T> where  T :class
        {
            public MyResponseCode Code
            {
                get;
                set;
            }
            public string Message
            {
                get;
                set;
            }
    
            //返回数据
            public T Data
            {
                get;
                set;
            }
    
            /// <summary>
            /// 成功
            /// </summary>
            /// <param name="message"></param>
            /// <param name="data"></param>
            /// <returns></returns>
            public static CommonServiceResponse<T> Success(string message, T data)
            {
                return new CommonServiceResponse<T>
                {
                    Message = message,
                    Code = MyResponseCode.Success,
                    Data= data
                };
            }
    
            /// <summary>
            /// 失败
            /// </summary>
            /// <param name="code"></param>
            /// <param name="message"></param>
            /// <returns></returns>
            public static CommonServiceResponse<T> Fail( string message = "")
            {
                return new CommonServiceResponse<T>
                {
                    Message = message,
                    Code =MyResponseCode.Failed
                };
            }       
        }
    }

     然后发下自己想复杂了,实际我不需要在乎数据是什么类型的,他是什么类型我就返回什么类型即可,采用object和dynamic。

    using System;
    
    namespace Awing.IBMS.MyServiceResponse
    {
        /// <summary>
        /// 数据类型转换  data.ToCommonServiceResponse("成功!")
        /// </summary>
        public static class CommonServiceResponseEX
        {
            public static CommonServiceResponse ToCommonServiceResponse(this object data,string message="") 
            {
                return CommonServiceResponse.Success(message, data);
            }
        }
    
        /// <summary>
        /// 返回类
        /// </summary>
        public  class CommonServiceResponse 
        {
            public MyResponseCode Code
            {
                get;
                set;
            }
            public string Message
            {
                get;
                set;
            }
    
            //返回数据
            public dynamic Data
            {
                get;
                set;
            }
    
            /// <summary>
            /// 成功
            /// </summary>
            /// <param name="message"></param>
            /// <param name="data"></param>
            /// <returns></returns>
            public static CommonServiceResponse Success(string message, dynamic data=null)
            {
                return new CommonServiceResponse
                {
                    Message = message,
                    Code = MyResponseCode.Success,
                    Data= data
                };
            }
    
            /// <summary>
            /// 失败
            /// </summary>
            /// <param name="message"></param>
            /// <returns></returns>
            public static CommonServiceResponse Fail( string message = "")
            {
                return new CommonServiceResponse
                {
                    Message = message,
                    Code =MyResponseCode.Failed
                };
            }
            
        }
    }

    其中,MyServiceResponse.cs

    using System;namespace Awing.IBMS.MyServiceResponse
    {
        public enum MyResponseCode
        {
            Failed = 0,
            Success = 20000
        }
    }

    打完收工!

    斩后知
  • 相关阅读:
    php冒泡排序和快速排序
    在thinkphp中js文件添加路径
    cookiesession
    搭建nginx环境(参考腾讯云实验室)
    验证码快速刷新
    使用Word发送,测试一下
    c++ DLL和c#之间传递字符串
    如何使CEF支持Flash
    如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持
    C#在Linux+Mono环境中使用微信支付证书
  • 原文地址:https://www.cnblogs.com/dyhao/p/14349183.html
Copyright © 2020-2023  润新知