zoukankan      html  css  js  c++  java
  • c# 调用服务返回结果模板化

    一般我们返回一个结果,主要有返回值,执行结果信息,所以定义一个类

     public  class QuestResult
        {

            /// <summary>
            /// 返回值
            /// </summary>
            public object Result { get; set; }

           /// <summary>
           /// 结果编码
           /// </summary>
            public ErrorCode Error { get; set; }

           /// <summary>
           /// 结果编码描述
           /// </summary>
            public string ErrorMsg { get; set; }

            /// <summary>
            /// 结果附近信息
            /// 主要是异常信息或者其它描述
            /// 例如:结果被截取
            /// </summary>
            public string ReslutMsg { get; set; }


        }

    对于返回的结果编码,采用枚举型方便扩展,而且可以为每个结对应的固定一个描述信息

    public enum ErrorCode
        {

            /// <summary>
            /// 成功
            /// </summary>
            /// 
            [Description("执行成功")]
            Sucess,

            /// <summary>
            ///执行超时
            /// </summary>
            /// 
            [Description("执行超时")]
            TimeOut,

            /// <summary>
            /// 执行异常
            /// </summary>
            /// 
            [Description("执行异常")]
            Exception,

            /// <summary>
            /// 结果被截取
            /// </summary>
            /// 
            [Description("结果被截取")]
            Truncate,

        }

    再启用一个扩展方法,获取枚举的描述信息

      /// </summary>
       public static class CommonExtend
        {
            /// <summary>
            /// 枚举描述
            /// </summary>
            private static Dictionary<string, string> dicEnum = new Dictionary<string, string>();
            /// <summary>
            /// 枚举描述特性获取信息
            /// </summary>
            /// <param name="value">枚举</param>
            /// <param name="isNameInstend">没有特性时是否直接使用字段名称</param>
            /// <returns></returns>
            public static string EnumDescription(this Enum value,bool isNameInstend=false)
            {
                Type type = value.GetType();
                string name = Enum.GetName(type, value);
                if (name == null)
                {
                    return null;
                }
                string description = "";
                if (dicEnum.TryGetValue(type.FullName+"_"+name,out description))
                {
                    return description;
                }
                FieldInfo field = type.GetField(name);
                DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
                if (attribute == null && isNameInstend == true)
                {
                    return name;
                }
                //
                if(attribute!=null)
                {
                    dicEnum[type.FullName + "_" + name] = attribute.Description;
                }
                return attribute == null ? null : attribute.Description;
            }
        }

    这样就方便获取所有信息了,结果类中定义的ErrorMsg不是编码描述,而是在执行错误后的Exception信息。

    这样一个类似标准的返回结果模板就差不多了。

  • 相关阅读:
    android中textview字数过长解决方法
    Android的EditText无法自动弹出输入法问题 .
    android中dip、dp、px、sp和屏幕密度
    android横竖屏切换 判断activity 是横屏还是竖屏
    设置ListView中图片的大小大方法 Android
    TextView属性详细分析
    ArcGIS API For Silverlight 实例分析
    Visual Studio 2008 里修改数据库表结构报错 解决办法
    未能加载文件或程序集“xxx”或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新,无法加载此程序集
    SuperMap iClient 6R for Silverlight 产品简介及Beta测试软件下载地址
  • 原文地址:https://www.cnblogs.com/jinyu20180311/p/10312362.html
Copyright © 2011-2022 走看看