Esempio n. 1
0
    private static bool _CheckMapStringParamData(JsonData jsonData, MapStringParamRequiredInfo paramRequiredInfo, out string errorString)
    {
        List <string> errorStringList = new List <string>();

        if (paramRequiredInfo.MapStringRequiredInfo == null)
        {
            if (paramRequiredInfo.ParamRequired == ParamRequired.MustHave)
            {
                if (jsonData.Keys.Contains(paramRequiredInfo.ParamName) == false)
                {
                    errorStringList.Add(string.Format("要求必须存在的参数{0}未声明", paramRequiredInfo.ParamName));
                }
            }
            else if (paramRequiredInfo.ParamRequired == ParamRequired.NotAllowed)
            {
                if (jsonData.Keys.Contains(paramRequiredInfo.ParamName) == true)
                {
                    errorStringList.Add(string.Format("不允许存在的参数{0}被声明了", paramRequiredInfo.ParamName));
                }
            }
        }
        else
        {
            if (jsonData.Keys.Contains(paramRequiredInfo.ParamName))
            {
                if (_CheckMapStringData(jsonData[paramRequiredInfo.ParamName], paramRequiredInfo.MapStringRequiredInfo, out errorString) == false)
                {
                    errorStringList.Add(string.Format("参数{0}下属map未通过检查:{1}", paramRequiredInfo.ParamName, errorString));
                }
            }
            else
            {
                errorStringList.Add(string.Format("规则要求对mapString型参数{0}下属的子元素进行检查,而输入数据中不含此参数", paramRequiredInfo.ParamName));
            }
        }

        if (errorStringList.Count == 0)
        {
            errorString = null;
            return(true);
        }
        else
        {
            errorString = Utils.CombineString(errorStringList, ";");
            return(false);
        }
    }
Esempio n. 2
0
    private void _GetMapElement(MapStringRequiredInfo requiredInfo, MapStringInfo formatDefine, out string errorString)
    {
        // 解析key
        if (_tokenQueue.Count == 0)
        {
            errorString = "定义不完整";
            return;
        }
        MapStringToken keyToken = _tokenQueue.Dequeue();

        if (keyToken.TokenType != MapStringTokenType.String)
        {
            errorString = string.Concat("map子元素中的key名非法,输入值为", keyToken.DefineString);
            return;
        }
        string key = keyToken.DefineString.Trim();

        // 检查该变量名是否定义
        if (!formatDefine.ParamInfo.ContainsKey(key))
        {
            errorString = string.Format("mapString定义中不存在名为{0}的key", key);
            return;
        }
        // 检查是否已存在此变量名
        MapStringParamInfo paramInfo = formatDefine.ParamInfo[key];

        if (requiredInfo.ParamRequiredInfo.ContainsKey(key))
        {
            errorString = string.Format("定义中存在相同的key名({0})", key);
            return;
        }

        // 判断key名后是否为等号
        if (_tokenQueue.Count == 0)
        {
            errorString = string.Format("定义不完整,map子元素中的key名({0})后缺失等号", key);
            return;
        }
        MapStringToken equalSignToken = _tokenQueue.Dequeue();

        if (equalSignToken.TokenType != MapStringTokenType.EqualSign)
        {
            errorString = string.Concat("map子元素中的key名({0})后应为等号,而输入值为{1}", key, equalSignToken.DefineString);
            return;
        }

        // 解析value值
        if (_tokenQueue.Count == 0)
        {
            errorString = string.Format("定义不完整,map子元素中的key名({0})在等号后未声明参数要求,请用1声明为必须存在或用0声明为不允许存在", key);
            return;
        }
        MapStringToken valueToken = _tokenQueue.Dequeue();

        if (valueToken.TokenType == MapStringTokenType.Number)
        {
            if ("1".Equals(valueToken.DefineString))
            {
                MapStringParamRequiredInfo paramRequiredInfo = new MapStringParamRequiredInfo();
                paramRequiredInfo.ParamName     = key;
                paramRequiredInfo.ParamRequired = ParamRequired.MustHave;

                requiredInfo.ParamRequiredInfo.Add(key, paramRequiredInfo);
            }
            else if ("0".Equals(valueToken.DefineString))
            {
                MapStringParamRequiredInfo paramRequiredInfo = new MapStringParamRequiredInfo();
                paramRequiredInfo.ParamName     = key;
                paramRequiredInfo.ParamRequired = ParamRequired.NotAllowed;

                requiredInfo.ParamRequiredInfo.Add(key, paramRequiredInfo);
            }
            else
            {
                errorString = string.Format("map子元素中的key名({0})对应的参数要求非法,输入值为\"{1}\",请用1或0分别设置该参数为必须含有或不允许含有", keyToken.DefineString);
                return;
            }
        }
        else if (valueToken.TokenType == MapStringTokenType.StartMap)
        {
            if (paramInfo.DataType == DataType.MapString)
            {
                MapStringRequiredInfo childRequiredInfo = new MapStringRequiredInfo();
                _GetMapElement(childRequiredInfo, formatDefine.ParamInfo[key].MapStringInfo, out errorString);
                if (errorString != null)
                {
                    errorString = string.Format("名为{0}的map下属的子元素错误:{1}", key, errorString);
                    return;
                }
                MapStringParamRequiredInfo paramRequiredInfo = new MapStringParamRequiredInfo();
                paramRequiredInfo.ParamName             = key;
                paramRequiredInfo.ParamRequired         = ParamRequired.None;
                paramRequiredInfo.MapStringRequiredInfo = childRequiredInfo;

                requiredInfo.ParamRequiredInfo.Add(key, paramRequiredInfo);
            }
            else
            {
                errorString = string.Format("mapString定义中要求key名({0})对应{1}类型的数据,而输入的检查规则却以mapString型进行设置,请不要对非mapString型使用括号声明", key, paramInfo.DataType);
                return;
            }
        }
        else
        {
            errorString = string.Format("map子元素中的key名({0})对应的参数要求非法,输入值为\"{1}\",请用1或0分别设置该参数为必须含有或不允许含有", keyToken.DefineString);
            return;
        }

        // 解析后面的token
        if (_tokenQueue.Count == 0)
        {
            errorString = string.Format("定义不完整,map下的子元素{0}之后未声明用英文逗号分隔下一个子元素,也没有声明map的结束", key);
            return;
        }
        MapStringToken nextToken = _tokenQueue.Dequeue();

        if (nextToken.TokenType == MapStringTokenType.EndMap)
        {
            errorString = null;
            return;
        }
        else if (nextToken.TokenType == MapStringTokenType.Comma)
        {
            if (_tokenQueue.Count == 0)
            {
                errorString = string.Format("定义不完整,map下的子元素{0}之后的英文逗号后未声明下一个元素", key);
                return;
            }
            _GetMapElement(requiredInfo, formatDefine, out errorString);
            if (errorString != null)
            {
                errorString = string.Format("名为{0}的子元素后面的元素声明错误:{1}", key, errorString);
                return;
            }
        }
        else
        {
            errorString = string.Format("map下的子元素{0}之后未声明用英文逗号分隔下一个子元素,也没有声明map的结束,输入值为{1}", key, nextToken.DefineString);
            return;
        }
    }