Boolean TryWrite(Object target, DME_BinaryWriter writer, DME_MemberInfo member, Boolean encodeInt, Boolean allowNull) { Object value = member.GetValue(target); // 基本类型 if (writer.WriteValue(value, encodeInt)) return true; // 允许空时,增加一个字节表示对象是否为空 if (value == null) { if (allowNull) writer.Write((Byte)0); return true; } if (allowNull) writer.Write((Byte)1); // 接口支持 //if (Array.IndexOf(member.Type.GetInterfaces(), typeof(IBinaryAccessor)) >= 0) if (typeof(DME_IBinaryAccessor).IsAssignableFrom(member.Type)) { // 调用接口 DME_IBinaryAccessor accessor = value as DME_IBinaryAccessor; accessor.Write(writer); return true; } #region 数组 if (member.Type.IsArray) { // 特殊处理字节数组 if (member.Type == typeof(Byte[])) { writer.Write((Byte[])value); return true; } Array arr = value as Array; if (arr != null) { } } #endregion #region 枚举 if (typeof(IEnumerable).IsAssignableFrom(member.Type)) { // 先写元素个数 IEnumerable arr = value as IEnumerable; Int32 count = 0; foreach (Object item in arr) { count++; } // 写入长度 writer.WriteEncoded(count); foreach (Object item in arr) { // 允许空时,增加一个字节表示对象是否为空 if (item == null) { if (allowNull) writer.Write((Byte)0); continue; } if (allowNull) writer.Write((Byte)1); if (!writer.WriteValue(item, encodeInt)) Write(item, writer, encodeInt, allowNull, member.Member.MemberType == MemberTypes.Property); } return true; } #endregion return false; }