Beispiel #1
0
        void IMobileObject.DeserializeRef(ISerializationContext info)
        {
            int count = info.GetState <int>("count");

            for (int index = 0; index < count; index++)
            {
                K key;
                if (_keyIsMobile)
                {
                    key = (K)info.GetRef(_keyPrefix + index);
                }
                else
                {
                    key = info.GetState <K>(_keyPrefix + index);
                }

                V value;
                if (_valueIsMobile)
                {
                    value = (V)info.GetRef(_valuePrefix + index);
                }
                else
                {
                    value = info.GetState <V>(_valuePrefix + index);
                }

                Add(key, value);
            }
        }
Beispiel #2
0
        protected override void OnMobileDeserializeState(ISerializationContext context)
        {
            this.Value = context.GetState<object>("v");
            this.TypeName = context.GetState<string>("t");

            base.OnMobileDeserializeState(context);
        }
Beispiel #3
0
        protected override void OnMobileDeserializeState(ISerializationContext context)
        {
            this.Value    = context.GetState <object>("v");
            this.TypeName = context.GetState <string>("t");

            base.OnMobileDeserializeState(context);
        }
Beispiel #4
0
        /// <summary>
        /// Override this method to manually deserialize child objects
        /// from data in the serialization stream.
        /// </summary>
        /// <param name="info">Object containing serialized values.</param>
        protected virtual void OnDeserializeRef(ISerializationContext info)
        {
            FieldsSerializationHelper.DeserialzeFields(this, info);

            bool mobileChildren = typeof(IMobileObject).IsAssignableFrom(typeof(T));

            if (mobileChildren)
            {
                var formatter  = info.RefFormatter;
                var references = info.GetState <object[]>("$list");
                if (references != null)
                {
                    foreach (int reference in references)
                    {
                        T child = (T)formatter.GetObject(reference);
                        this.Add(child);
                    }
                }
            }
            else
            {
                var bufferObj = info.GetState <object[]>("$list");

                var buffer = new byte[bufferObj.Length];
                for (int i = 0, c = bufferObj.Length; i < c; i++)
                {
                    buffer[i] = (byte)(int)bufferObj[i];
                }

                using (MemoryStream stream = new MemoryStream(buffer))
                {
                    var            dcs  = new serialization.DataContractSerializer(GetType());
                    MobileList <T> list = (MobileList <T>)dcs.ReadObject(stream);
                    AddRange(list);
                }
            }
        }
Beispiel #5
0
        /// <summary>
        /// Override this method to set custom child object
        /// values into the serialization stream.
        /// </summary>
        /// <param name="info">Serialization info.</param>
        /// <param name="formatter">Reference to the MobileFormatter.</param>
        protected virtual void OnDeserializeRef(ISerializationContext info)
        {
            if (!typeof(IMobileObject).IsAssignableFrom(typeof(T)))
            {
                throw new InvalidOperationException("CannotSerializeCollectionsNotOfIMobileObject");
            }

            var formatter = info.RefFormatter;

            var references = info.GetState <object[]>("$list");

            if (references != null)
            {
                foreach (int reference in references)
                {
                    T child = formatter.GetObject <T>(reference);
                    this.Add(child);
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// Override this method to set custom field values
        /// into the serialization stream.
        /// </summary>
        /// <param name="info">Serialization info.</param>
        protected virtual void OnDeserializeState(ISerializationContext info)
        {
            var bc = new BitContainer(info.GetState <int>("$ListValues"));

            AllowEdit              = bc.GetValue(Bit._1);
            AllowNew               = bc.GetValue(Bit._2);
            AllowRemove            = bc.GetValue(Bit._4);
            RaiseListChangedEvents = bc.GetValue(Bit._8);

            //使用 byte
            //var iValues = info.GetState<byte>("$ListValues");
            //AllowEdit = (iValues & 8) == 8;
            //AllowNew = (iValues & 4) == 4;
            //AllowRemove = (iValues & 2) == 2;
            //RaiseListChangedEvents = (iValues & 1) == 1;

            //使用 bool 数组
            //var values = info.GetValue<bool[]>("ListValues");
            //AllowEdit = values[0];
            //AllowNew = values[1];
            //AllowRemove = values[2];
            //RaiseListChangedEvents = values[3];
        }