public static object ReadObject(this ObjectReader reader, int index) { var type = reader.ReadType(); var value = FormatterServices.GetUninitializedObject(type); reader.ReferenceContainer[index] = value; var fields = SerializationHelper.GetSerializableMembers(type); foreach (var field in fields) { var fieldValue = reader.Deserialize(); var fieldInfo = field.Field; if (fieldValue != null && fieldInfo.FieldType.IsNullable()) { var enumType = fieldInfo.FieldType.GetGenericArguments()[0]; if (enumType.IsEnum) { fieldValue = Enum.ToObject(enumType, fieldValue); } } field.SetValue(value, fieldValue); } return(value); }
public static void InnerWriteObject(this ObjectWriter writer, object value, Type type, FormatterTag tagType) { writer.WriteTag(tagType); writer.InnerWrite(type); SerializableFieldInfo[] fields = SerializationHelper.GetSerializableMembers(type); foreach (var field in fields) { writer.Serialize(field.GetValue(value), field.Field); } }
public static object ReadValueTypeObject(this ObjectReader reader) { var type = reader.ReadType(); var value = FormatterServices.GetUninitializedObject(type); var fields = SerializationHelper.GetSerializableMembers(type); foreach (var field in fields) { var fieldValue = reader.Deserialize(); field.SetValue(value, fieldValue); } return(value); }
public static object ReadValueTypeObject(this ObjectReader reader) { var type = reader.ReadType(); var value = FormatterServices.GetUninitializedObject(type); Aoite.Reflection.Emitter.ValueTypeHolder holder = new Aoite.Reflection.Emitter.ValueTypeHolder(value); //- 值类型 var fields = SerializationHelper.GetSerializableMembers(type); foreach (var field in fields) { var fieldValue = reader.Deserialize(); field.SetValue(holder, fieldValue); } return(holder.Value); }