Example #1
0
        /// <summary>
        /// Deserializes PortableObjectDocument into original graph of arbitrary CLR objects trying to preserve/convert as much data as possible
        ///  using optionally supplied strategy
        /// </summary>
        public object ToOriginalObject(ReadingStrategy strategy = null)
        {
            if (strategy == null)
            {
                strategy = ReadingStrategy.Default;
            }

            if (m_Root == null)
            {
                return(null);
            }

            m_StreamingContext = new StreamingContext();

            try
            {
                var result = PortableDataToNativeData(strategy, m_Root);


                if (m_CompositeData != null)
                {
                    foreach (var cd in m_CompositeData)
                    {
                        var obj = cd.__CLRObject;
                        if (obj == null)
                        {
                            continue;
                        }

                        //invoke all IDeserializationCallback-implementors
                        if (obj is IDeserializationCallback)
                        {
                            ((IDeserializationCallback)obj).OnDeserialization(this);
                        }

                        //invoke all OnDeserialized
                        List <MethodInfo> methodsOnDeserialized = SerializationUtils.FindSerializationAttributedMethods(obj.GetType(), typeof(OnDeserializedAttribute));
                        if (methodsOnDeserialized != null)
                        {
                            SerializationUtils.InvokeSerializationAttributedMethods(methodsOnDeserialized, obj, m_StreamingContext);
                        }
                    }
                }


                return(result);
            }
            finally
            {
                purgeCaches();    //drop all temp objects
            }
        }
Example #2
0
        /// <summary>
        /// Transforms a portable data value, such as object, primitive, struct etc.. into a CLR
        /// </summary>
        public object PortableDataToNativeData(ReadingStrategy strategy, object data)
        {
            if (data == null)
            {
                return(null);
            }
            if (!(data is CompositeData))
            {
                return(data);
            }
            var cd = (CompositeData)data;

            return(strategy.CompositeToNative(cd));
        }
Example #3
0
 /// <summary>
 /// Handles the assignemnt from ReflectedData into CLR fieldInfo. Override to make conversions, i.e. string to bool, int to string etc...
 /// Return true to indicate that default framework implementation should not be called
 /// </summary>
 public abstract bool SetFieldValue(ReadingStrategy readingStrategy, object instance, FieldInfo fieldInfo, CompositeReflectedData data, MetaComplexType.MetaField mfield);