private void write(VO entity) { Type type = entity.GetType(); FieldInfo[] fields = type.GetFields(); foreach (FieldInfo fieldInfo in fields) { if (!fieldInfo.IsPublic) { continue; } bool primitive = fieldInfo.FieldType.IsPrimitive; string varName = fieldInfo.Name; string typeName = fieldInfo.FieldType.Name; if (fieldInfo.FieldType.IsPrimitive) //int float double long { writePrimitive(entity, varName, typeName); continue; } //非基本类型: string object array if (typeName == "String") //字符串 { writeString(entity.getVarValue <string> (varName), entity.getVarId(varName)); continue; } //集合类 if (typeName == "ArrayList") { writeArray(entity.getVarValue <ArrayList> (varName), entity.getVarId(varName)); } if (typeName == "VO") { writeObject(entity.getVarValue <VO> (varName), entity.getVarId(varName), true); } else { //通过BaseType来找 typeName = fieldInfo.FieldType.BaseType.Name; if (typeName == "VO") { writeObject(entity.getVarValue <VO> (varName), entity.getVarId(varName), true); } } Console.WriteLine(varName + " " + typeName + " " + (primitive ? "true" :"false")); } }
public DataEncoder(VO entity, byte identity = 0, bool writeClazzIdentifer = true) { this.entity = entity; if (identity == 0) { identity = (byte)DataType.Default; } else //写入标识 ,当标识不等于DataType.Default时 { memoryStream.WriteByte(identity); } this.identity = identity; if (writeClazzIdentifer) { if (!VoMapping.ContainsKey(entity.GetType().Name)) { int i = 0; } int clazzIdentifer = VoMapping[entity.GetType().Name]; writeByte2(clazzIdentifer); } }