/// <summary> /// Resolves composite data into CLR object /// </summary> public virtual object CompositeToNative(CompositeData data) { if (data==null) return null; if (data.ExistingReference) return CompositeToNative(data.Referenced); var result = data.__CLRObject; if (result==null) { //1. Construct result = ConstructObject(data); data.__CLRObject = result; //2. Fill with data if (data is CompositeCustomData) DeserializeObjectFromCompositeCustomData(result, (CompositeCustomData)data); else if (data is CompositeArrayData) DeserializeArray((Array)result, (CompositeArrayData)data); else DeserializeObjectFromCompositeReflectedData(result, (CompositeReflectedData)data); } return result; }
/// <summary> /// Constructs object out of CompositeData. This implementation calls ResolveType then tries to invoke attribute constructor first /// then create instance using default ctor /// </summary> public virtual object ConstructObject(CompositeData data) { object result = null; var clrType = ResolveType( data.Type ); //1 check for attribute --------------- var attr = (PortableObjectDocumentDeserializationTransform)clrType .GetCustomAttributes(typeof(PortableObjectDocumentDeserializationTransform), false) .FirstOrDefault(); if (attr!=null) result = attr.ConstructObjectInstance(data); if (result==null) { //2 call the dfault .ctor if (data is CompositeArrayData) result = MakeNewArrayInstance( (CompositeArrayData)data ); else result = MakeNewObjectInstanceUsingDefaultCtor( clrType ); } //3 call OnDeserializing if (result!=null) { List<MethodInfo> methodsOnDeserializing = SerializationUtils.FindSerializationAttributedMethods( result.GetType(), typeof(OnDeserializingAttribute)); if (methodsOnDeserializing!=null) SerializationUtils.InvokeSerializationAttributedMethods(methodsOnDeserializing, result, data.Document.m_StreamingContext); } return result; }
/// <summary> /// Constructs object out of CompositeData. This implementation calls ResolveType then tries to invoke attribute constructor first /// then create instance using default ctor /// </summary> public virtual object ConstructObject(CompositeData data) { object result = null; var clrType = ResolveType(data.Type); //1 check for attribute --------------- var attr = (PortableObjectDocumentDeserializationTransform)clrType .GetCustomAttributes(typeof(PortableObjectDocumentDeserializationTransform), false) .FirstOrDefault(); if (attr != null) { result = attr.ConstructObjectInstance(data); } if (result == null) { //2 call the dfault .ctor if (data is CompositeArrayData) { result = MakeNewArrayInstance((CompositeArrayData)data); } else { result = MakeNewObjectInstanceUsingDefaultCtor(clrType); } } //3 call OnDeserializing if (result != null) { List <MethodInfo> methodsOnDeserializing = SerializationUtils.FindSerializationAttributedMethods(result.GetType(), typeof(OnDeserializingAttribute)); if (methodsOnDeserializing != null) { SerializationUtils.InvokeSerializationAttributedMethods(methodsOnDeserializing, result, data.Document.m_StreamingContext); } } return(result); }
/// <summary> /// Resolves composite data into CLR object /// </summary> public virtual object CompositeToNative(CompositeData data) { if (data == null) { return(null); } if (data.ExistingReference) { return(CompositeToNative(data.Referenced)); } var result = data.__CLRObject; if (result == null) { //1. Construct result = ConstructObject(data); data.__CLRObject = result; //2. Fill with data if (data is CompositeCustomData) { DeserializeObjectFromCompositeCustomData(result, (CompositeCustomData)data); } else if (data is CompositeArrayData) { DeserializeArray((Array)result, (CompositeArrayData)data); } else { DeserializeObjectFromCompositeReflectedData(result, (CompositeReflectedData)data); } } return(result); }
/// <summary> /// Override to construct new object instance from CompositeData. /// Return null to let the default implementatiom/ctor be invoked by the framework /// </summary> public abstract object ConstructObjectInstance(CompositeData data);
/// <summary> /// Override to construct new object instance from CompositeData. /// Return null to let the default implementatiom/ctor be invoked by the framework /// </summary> public abstract object ConstructObjectInstance(CompositeData data);