Exemple #1
0
        private static void InitConverterNode(TTLVAttribute ttlvAttribute, TTLVStructNode node, Type eleType)
        {
            if (ttlvAttribute.ConverterType.GetInterface(_ttlvIConverterTypeName) == null)
            {
                throw new ArgumentException(string.Format("转换器类型[{0}]未实现[{1}]接口", ttlvAttribute.ConverterType.FullName, _ttlvIConverterTypeName));
            }

            node.Converter     = CreateTTLVConverter(ttlvAttribute);
            node.ConverterPara = ttlvAttribute.ConverterPara;
            node.TTLVType      = TTLVType.Convert;
            node.ElementType   = eleType;
        }
Exemple #2
0
        private static ITTLVConverter CreateTTLVConverter(TTLVAttribute ttlvAttribute)
        {
            ITTLVConverter converter;
            var            key = ttlvAttribute.ConverterType;

            if (_htConverter.ContainsKey(key))
            {
                converter = (ITTLVConverter)_htConverter[key];
            }
            else
            {
                converter         = (ITTLVConverter)Activator.CreateInstance(ttlvAttribute.ConverterType);
                _htConverter[key] = converter;
            }

            return(converter);
        }
Exemple #3
0
        private static void InitNoConverterNode(Dictionary <Type, TTLVStructNode> allNodeDic, FieldInfo fieldInfo, TTLVAttribute ttlvAttribute, TTLVStructNode node)
        {
            switch (ttlvAttribute.PropertyType)
            {
            case TTLVPropertyType.Collection:
                Type     eleType;
                TTLVType ttlvType;
                TTLVCommon.GetCollectionElementType(fieldInfo.FieldType, out eleType, out ttlvType);
                node.TTLVType    = ttlvType;
                node.ElementType = eleType;
                CreateTypeStructTree(allNodeDic, node, eleType);
                break;

            case TTLVPropertyType.SingleObject:
                if (allNodeDic.ContainsKey(fieldInfo.FieldType))
                {
                    //解决递归类型,即类型同嵌套自身类型
                    node.RefNode = allNodeDic[fieldInfo.FieldType];
                }
                else
                {
                    allNodeDic.Add(fieldInfo.FieldType, node);
                    node.ElementType = fieldInfo.FieldType;
                    CreateTypeStructTree(allNodeDic, node, fieldInfo.FieldType);
                }

                node.TTLVType = TTLVType.Object;
                break;

            default:
                throw new NotImplementedException($"未实现的TTLVPropertyType[{ttlvAttribute.PropertyType.ToString()}]");
            }
        }