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
    }
}

 

打完收工!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM