不知道怎么表达这个东西,先记录一下吧,如果你们有好的想法可以联系我,共同进步

/// <summary>
        /// 自定义属性帮助类
        /// </summary>
        public class AttributeHelper
        {
            /// <summary>
            /// 获取字符串字节长度
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public static int StringToByteLength(string str)
            {
                //使用Unicode编码的方式将字符串转换为字节数组,它将所有字符串(包括英文中文)全部以2个字节存储
                byte[] bytestr = System.Text.Encoding.UTF8.GetBytes(str);
                int j = 0;
                for (int i = 0; i < bytestr.GetLength(0); i++)
                {
                    //取余2是因为字节数组中所有的双数下标的元素都是unicode字符的第一个字节
                    if (i % 2 == 0)
                    {
                        j++;
                    }
                    else
                    {
                        //单数下标都是字符的第2个字节,如果一个字符第2个字节为0,则代表该Unicode字符是英文字符,否则为中文字符
                        if (bytestr[i] > 0)
                        {
                            j++;
                        }
                    }
                }
                return j;
            }
            /// <summary>
            /// 验证字段属性
            /// </summary>
            public void Validate()
            {
                ValidationContext context = new ValidationContext(this, serviceProvider: null, items: null);
                List<ValidationResult> results = new List<ValidationResult>();
                bool isValid = Validator.TryValidateObject(this, context, results, true);

                if (isValid == false)
                {
                    StringBuilder sbrErrors = new StringBuilder();
                    foreach (var validationResult in results)
                    {
                        sbrErrors.AppendLine(validationResult.ErrorMessage);
                    }
                    throw new ValidationException(sbrErrors.ToString());
                }
            }

            /// <summary>
            /// 判断字符串字节长度
            /// </summary>
            public class IsByteLength : ValidationAttribute
            {
                public IsByteLength(string errorMsg, int len)
                {
                    this.ErrorMsg = errorMsg;
                    this.Len = len;
                }
                public string ErrorMsg { get; private set; }
                public int Len { get; private set; }
                protected override ValidationResult IsValid(object value, ValidationContext validationContext)
                {
                    if (value.GetType().Equals(typeof(string)))
                    {
                        if (StringToByteLength(value.ToString()) > Len)
                        {
                            var error = new ValidationResult(ErrorMsg);
                            return error;
                        }
                    }
                    return null;
                }
            }
            public static string ObjToString( object thisValue)
            {
                if (thisValue != null) return thisValue.ToString().Trim();
                return "";
            }

            public class IsFieldVereist : ValidationAttribute
            {
                public string ErrorMsg { get; private set; }
                public string TypeName { get; private set; }
                public IsFieldVereist(string errorMsg, string typeName="")
                {
                    this.ErrorMsg = errorMsg;
                    this.TypeName = typeName;
                }
                protected override ValidationResult IsValid(object value, ValidationContext validationContext)
                {
                    if (!string.IsNullOrWhiteSpace(TypeName))
                    {
                        var tempData = Convert.ChangeType(validationContext.ObjectInstance, validationContext.ObjectType);
                        System.Reflection.PropertyInfo propertyInfo = validationContext.ObjectType.GetProperty(TypeName);
                        if (value != null || !string.IsNullOrWhiteSpace(ObjToString(value)))
                        {
                            if (propertyInfo.GetValue(tempData, null) == null)
                            {
                                var error = new ValidationResult(ErrorMsg);
                                return error;
                            }
                        }
                    }
                    else
                    {
                        if (value == null || string.IsNullOrWhiteSpace(ObjToString(value)))
                        {
                            var error = new ValidationResult(ErrorMsg);
                            return error;
                        }
                    }
                   
                    return null;
                }
            }

        }

C#  自定义特性属性 限制自定义字段 数据的更多相关文章

  1. 1122 django属性操作orm字段数据操作

    目录 1. 静态文件的配置 手动静态文件的访问资源 静态文件的动态绑定 2.request方法 2.1 请求方式 2.2 获取前端的请求方式 request.method 2.3 request方法 ...

  2. C#编程(七十一)---------- 自定义特性

    自定义特性 在说自定义之前,有必要先介绍一些基本的概念. 元数据:就是C#中封装的一些类,无法修改,类成员的特性被称为元数据中的注释 1.什么是特性? (1)属性和特性的区别 属性:属性是面向对象思想 ...

  3. C# 通过自定义特性 实现根据实体类自动创建数据库表

    .Net新手通常容易把属性(Property)跟特性(Attribute)搞混,其实这是两种不同的东西 属性指的类中封装的数据字段:而特性是对类.字段.方法和属性等元素标注的声明性信息 如下代码(Id ...

  4. C#之自定义特性

    在前面介绍的代码中有使用特性,这些特性都是Microsoft定义好的,作为.NET Framework类库的一部分,许多特性都得到了C#编译器的支持. .NET Frmework也允许定义自己的特性. ...

  5. C#特性:从自定义一个特性开始,谈谈什么是特性

    作为C#新手中的一员,我刚开始接触特性时,那真是一脸冏逼啊,怎么想怎么查资料都没弄明白它到底是个什么东西,有的入门教程甚至都没讲特性和反射这些概念!相信很多人第一次接触到特性就是关于系列化的知识了. ...

  6. .net使用自定义类属性

    .net中可以使用Type.GetCustomAttributes获取类上的自定义属性,可以使用PropertyInfo.GetCustomAttributes获取属性信息上的自定义属性. 下面以定义 ...

  7. c#通过反射获取类上的自定义特性

    c#通过反射获取类上的自定义特性 本文转载:http://www.cnblogs.com/jeffwongishandsome/archive/2009/11/18/1602825.html 下面这个 ...

  8. 如何获取类或属性的自定义特性(Attribute)

    如何获取类或属性的自定义特性(Attribute) 问题说明: 在ActiveRecord或者其他的ORM等代码中, 我们经常可以看到自定义特性(Attribute)的存在(如下面的代码所示) [Pr ...

  9. Asp.net core通过自定义特性实现双端数据验证的一些想法

    asp.net core集成了非常方便的数据绑定和数据校验机制,配合操作各种easy的vs,效率直接高到飞起. 通过自定义验证特性(Custom Validation Attribute)可以实现对于 ...

  10. C#自定义特性实例

    元数据,就是C#中封装的一些类,无法修改.类成员的特性被称为元数据中的注释. 1.什么是特性   (1)属性与特性的区别  属性(Property):属性是面向对象思想里所说的封装在类里面的数据字段, ...

随机推荐

  1. 学习EXTJS6(9)面向对象的基础框架-1

    Ext创造一套精细的对象模型与API,用这套API,可以快速实现对象的定义.创建.继承和扩展:1. 1.创建新类 Ext.define('demo.Demo',{ name: 'usegear', h ...

  2. 大模型 Token 究竟是啥:图解大模型Token

    前几天,一个朋友问我:"大模型中的 Token 究竟是什么?" 这确实是一个很有代表性的问题.许多人听说过 Token 这个概念,但未必真正理解它的作用和意义.思考之后,我决定写篇 ...

  3. 【Linux】编译用于exynos4412(ARM)的Linux-3.14内核

    [Linux]编译用于exynos4412(ARM)的Linux-3.14内核 零.准备 1.下载 Linux-3.14内核源代码 下载页面:https://www.kernel.org/pub/li ...

  4. fidder抓包微信小程序的方法

    想获取小程序的请求和返回数据,要么通过抓包工具抓包,要么使用小程序调试工具直接查看 总结下怎样使用fidder抓包 第一步,各种配置,把下面一系列图片里该勾的都勾上,够好了重启fidder 第二步,打 ...

  5. 康谋分享 | aiSim5激光雷达LiDAR模型验证方法(二)

    aiSim中的LiDAR是一种基于光线追踪的传感器,能够模拟真实LiDAR发射的激光束,将会生成LAS v1.4标准格式的3D点云,包含了方位角.俯仰角和距离等. aiSim能够模拟LiDAR单态(M ...

  6. 倍增 & Tarjan 求解LCA

    什么是LCA? 假设我们有一棵树: 1 / \ 2 3 / \ / 4 5 6 对于 \(2\) 和 \(6\) 的LCA,就是最近公共祖先,即为距离 \(2\) 和 \(6\) 最近的两个节点公有的 ...

  7. 47.9K star!全平台开源笔记神器,隐私安全首选!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "Joplin 是一款开源的笔记记录和待办事项应用,支持端到端加密同步,完美替代商 ...

  8. 各式各样的console

    目录 知乎的console 百度的console B站的console 知乎的console 我很喜欢hire的文字样式. _____ _____ _____ _____ /\ \ /\ \ /\ \ ...

  9. 【HUST】网安|多媒体数据安全实验|LSB隐写和DCT域JSTEG+F4+F5隐写及检测

    文章目录 LSB空域隐写 原理 值对现象原理 实验内容 DCT域隐写 JSteg F4 F5 代码仓库:代码.嵌入提取使用的图像.jpeg_tool库.实验报告_Gitee. 实验环境:MATLAB ...

  10. TensorFlow 基础 (03)

    项目再忙碌, 还是要抽出时间来学习的. 最近到整一些数据清洗小工具, 数据导入数据库工具等... 有种感觉是, 之前我做分析师的时候, 啥工具都没有, 全部我自己造, 数据表整理, 业务整理, 建库建 ...