LinkSpecialWrite() static private méthode

static private LinkSpecialWrite ( Type actualType ) : WriteMethodDelegate
actualType System.Type
Résultat WriteMethodDelegate
Exemple #1
0
        internal static WriteMethods GetReflectionBasedWriteMethods()
        {
            WriteMethods writeMethods;

            writeMethods.writeMethodsProvider = new DynamicMethodProvider <WriteMethodDelegate>(t =>
            {
                var specialWrite = ObjectWriter.LinkSpecialWrite(t);
                return(specialWrite ?? ObjectWriter.WriteObjectUsingReflection);
            });

            writeMethods.handleNewReferenceMethodsProvider = new DynamicMethodProvider <HandleNewReferenceMethodDelegate>(t =>
            {
                return((ow, o, refId) => ow.HandleNewReference(o, refId));
            });

            writeMethods.surrogateObjectIfNeededMethodsProvider = new DynamicMethodProvider <SurrogateObjectIfNeededDelegate>(t =>
            {
                return((ow, o, refId) => ow.SurrogateObjectIfNeeded(o, refId));
            });

            writeMethods.writeReferenceMethodsProvider = new DynamicMethodProvider <WriteReferenceMethodDelegate>(t =>
            {
                return((ow, o) => ow.CheckLegalityAndWriteDeferredReference(o));
            });

            writeMethods.callPostSerializationHooksMethodsProvider = new DynamicMethodProvider <CallPostSerializationHooksMethodDelegate>(t =>
            {
                return((ow, o) => ow.CallPostSerializationHooksUsingReflection(o));
            });
            return(writeMethods);
        }
Exemple #2
0
        private ObjectWriter CreateWriter(Stream stream)
        {
            WriteMethods writeMethods;

            if (settings.SerializationMethod == Method.Generated)
            {
                writeMethods.writeMethodsProvider = new DynamicMethodProvider <WriteMethodDelegate>(t =>
                {
                    var specialWrite = ObjectWriter.LinkSpecialWrite(t);
                    if (specialWrite != null)
                    {
                        return(specialWrite);
                    }

                    var generator = new WriteMethodGenerator(t, settings.DisableTypeStamping, settings.TreatCollectionAsUserObject);
                    return(generator.Generate());
                });

                writeMethods.handleNewReferenceMethodsProvider = new DynamicMethodProvider <HandleNewReferenceMethodDelegate>(t =>
                {
                    var generator = new HandleNewReferenceMethodGenerator(t, objectsForSurrogates, settings.DisableTypeStamping, settings.TreatCollectionAsUserObject, OnPreSerialization != null, OnPostSerialization != null);
                    return(generator.Generate());
                });

                writeMethods.surrogateObjectIfNeededMethodsProvider = new DynamicMethodProvider <SurrogateObjectIfNeededDelegate>(t =>
                {
                    var generator = new SurrogateObjectIfNeededMethodGenerator(t, surrogatesForObjects, settings.DisableTypeStamping, settings.TreatCollectionAsUserObject);
                    return(generator.Generate());
                });

                writeMethods.writeReferenceMethodsProvider = new DynamicMethodProvider <WriteReferenceMethodDelegate>(t =>
                {
                    var generator = new WriteReferenceMethodGenerator(t, settings.DisableTypeStamping, settings.TreatCollectionAsUserObject);
                    return(generator.Generate());
                });

                writeMethods.callPostSerializationHooksMethodsProvider = new DynamicMethodProvider <CallPostSerializationHooksMethodDelegate>(t =>
                {
                    var generator = new CallPostSerializationHooksMethodGenerator(t, settings.DisableTypeStamping, settings.TreatCollectionAsUserObject);
                    return(generator.Generate());
                });
            }
            else
            {
                writeMethods = GetReflectionBasedWriteMethods();
            }

            return(new ObjectWriter(stream, writeMethods, OnPreSerialization, OnPostSerialization,
                                    surrogatesForObjects, objectsForSurrogates, settings.TreatCollectionAsUserObject,
                                    settings.UseBuffering, settings.DisableTypeStamping, settings.ReferencePreservation));
        }