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; }
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); }
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()}]"); } }