Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }