Ejemplo n.º 1
0
        public override object ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context)
        {
            xmlReader.Read();
            Type   objType = UnderlyingType;
            object obj     = objType.IsArray ? Array.CreateInstance(objType.GetElementType(), 0) : GetUninitializedObject(objType);

            context.AddNewObject(obj);
            string            objectId = context.GetObjectId();
            SerializationInfo serInfo  = context.ReadSerializationInfo(xmlReader, objType);
            object            newObj   = SerializationSurrogateSetObjectData(obj, serInfo, context.GetStreamingContext());

            if (newObj == null)
            {
                newObj = obj;
            }
            if (newObj is IDeserializationCallback)
            {
                ((IDeserializationCallback)newObj).OnDeserialization(null);
            }
            if (newObj is IObjectReference)
            {
                newObj = GetRealObject((IObjectReference)newObj, context.GetStreamingContext());
            }
            context.ReplaceDeserializedObject(objectId, obj, newObj);
            xmlReader.ReadEndElement();
            return(newObj);
        }
        void ReadISerializable(ClassDataContract classContract)
        {
            ConstructorInfo ctor = classContract.GetISerializableConstructor();
            var             info = context.ReadSerializationInfo(xmlReader, classContract.UnderlyingType);

            ctor.Invoke(objectLocal, new object [] { info, context.GetStreamingContext() });
        }
Ejemplo n.º 3
0
        private static object ReadISerializable(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, ClassDataContract classContract)
        {
            object            obj;
            SerializationInfo serializationInfo        = context.ReadSerializationInfo(xmlReader, classContract.UnderlyingType);
            StreamingContext  streamingContext         = context.GetStreamingContext();
            ConstructorInfo   iSerializableConstructor = classContract.GetISerializableConstructor();

            obj = iSerializableConstructor.Invoke(new object[] { serializationInfo, streamingContext });
            return(obj);
        }