Пример #1
0
        /// <summary>
        /// Perform a deep Copy of the object.
        /// </summary>
        /// <typeparam name="T">The type of object being copied.</typeparam>
        /// <param name="source">The object instance to copy.</param>
        /// <returns>The copied object.</returns>
        public static T Clone <T>(this T source, bool ignoreId = false)
        {
            //if (!typeof(T).IsSerializable)
            //{
            //    throw new ArgumentException("The type must be serializable.", "source");
            //}

            // Don't serialize a null object, simply return the default for that object
            if (Object.ReferenceEquals(source, null))
            {
                return(default(T));
            }

            //IFormatter formatter = new BinaryFormatter();
            //formatter.Context = new StreamingContext(StreamingContextStates.Clone);
            //Stream stream = new MemoryStream();
            //using (stream)
            //{
            //    formatter.Serialize(stream, source);
            //    stream.Seek(0, SeekOrigin.Begin);
            //    return (T)formatter.Deserialize(stream);
            //}
            var tmp = SilverlightSerializer.IgnoreIds;

            SilverlightSerializer.IgnoreIds = ignoreId;
            var c   = SilverlightSerializer.Serialize(source);
            var res = (T)SilverlightSerializer.Deserialize(c);

            SilverlightSerializer.IgnoreIds = tmp;
            return(res);
        }
Пример #2
0
        public static bool IsModified(this object currentCopy, object original)
        {
            string orgSum  = SilverlightSerializer.GetChecksum(original);
            string copySum = SilverlightSerializer.GetChecksum(currentCopy);

            return(orgSum != copySum);
        }
Пример #3
0
        public static ApplicationState LoadState()
        {
            try
            {
                using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (store.FileExists(Constants.StateFileName))
                    {
                        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(Constants.StateFileName, FileMode.Open, store))
                        {
                            //DataContractSerializer serializer = new DataContractSerializer(typeof(ApplicationState));
                            //return (ApplicationState)serializer.ReadObject(stream);
                            var state = (ApplicationState)SilverlightSerializer.Deserialize(stream);
                            return(state);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
#if DEBUG
                //throw;
#endif
            }

            return(null);
        }
Пример #4
0
        public static T Copy <T>(this T oSource, bool ignoreId = false)
        {
            //T oClone;
            //DataContractSerializer dcs = new DataContractSerializer(typeof(T));

            //using (MemoryStream ms = new MemoryStream())
            //{
            //    dcs.WriteObject(ms, oSource);
            //    ms.Position = 0;
            //    oClone = (T)dcs.ReadObject(ms);
            //}

            //return oClone;
            //BUG FII
            SilverlightSerializer.Reset();
            var tmp = SilverlightSerializer.IgnoreIds;

            SilverlightSerializer.IgnoreIds = ignoreId;
            var c   = SilverlightSerializer.Serialize(oSource);
            var res = (T)SilverlightSerializer.Deserialize(c);

            SilverlightSerializer.IgnoreIds = tmp;


            return(res);
        }
Пример #5
0
        private void Save()
        {
            if (string.IsNullOrEmpty(Name))
            {
                return;
            }
            var data = SilverlightSerializer.Serialize(ColumnInfo);

            File.WriteAllBytes(LocalSettings.DocumentPath + "\\" + Name + ".dat", data);
        }
Пример #6
0
        public async Task SaveToStorage(object model)
        {
            var datafile = await ApplicationData.Current.LocalFolder.CreateFileAsync(GetDataFileName(model.GetType()),
                                                                                     CreationCollisionOption.ReplaceExisting);

            using (var fileStream = await datafile.OpenStreamForWriteAsync())
            {
                SilverlightSerializer.Serialize(model, fileStream);
            }
        }
Пример #7
0
        private void TestDateTimeOffsetEqualness(DateTimeOffset testDate)
        {
            var m = new MemoryStream();

            SilverlightSerializer.Serialize(testDate, m);
            m.Seek(0, SeekOrigin.Begin);

            var testDate2 = (DateTimeOffset)SilverlightSerializer.Deserialize(m);

            Assert.AreEqual(testDate, testDate2);
        }
Пример #8
0
        private void PersistAllAsync(object o)
        {
            LocalSettings.UpdateThreadLanguage();
            if (!string.IsNullOrEmpty(o.ToString()) && (int)o != _tNumber)
            {
                return;
            }
            var data = SilverlightSerializer.Serialize(_storage);

            File.WriteAllBytes(_fileName, data);
        }
Пример #9
0
        public bool StartSerializing(Entry entry, int id)
        {
            if (entry.MustHaveName)
            {
                ushort nameID = SilverlightSerializer.GetPropertyDefinitionId(entry.Name);
                WriteSimpleValue(nameID);
            }
            var item = entry.Value ?? new SilverlightSerializer.Nuller();

            EncodeType(item, entry.StoredType);
            return(false);
        }
Пример #10
0
        public void TestDateTime()
        {
            var testDate = DateTime.Now;

            var m = new MemoryStream();

            SilverlightSerializer.Serialize(testDate, m);
            m.Seek(0, SeekOrigin.Begin);

            var testDate2 = (DateTime)SilverlightSerializer.Deserialize(m);

            Assert.AreEqual(testDate, testDate2);
        }
Пример #11
0
        private void PersistAllAsync(object o)
        {
            LocalSettings.UpdateThreadLanguage();
            if (!string.IsNullOrEmpty(o.ToString()) && (int)o != _tNumber)
            {
                return;
            }
            //var serializerHelper = new XmlSerializerHelper { IgnoreSerializableAttribute = true, IgnoreSerialisationErrors = true };
            //serializerHelper.Serialize(_storage, _fileName);
            var data = SilverlightSerializer.Serialize(_storage);

            File.WriteAllBytes(_fileName, data);
        }
Пример #12
0
        public void StartDeserializing()
        {
            SilverlightSerializer.KtStack.Push(SilverlightSerializer.KnownTypes);
            SilverlightSerializer.PiStack.Push(SilverlightSerializer.PropertyIds);

            var stream  = new MemoryStream(Data);
            var reader  = new BinaryReader(stream);
            var version = reader.ReadString();

            SilverlightSerializer.currentVersion = int.Parse(version.Substring(4));
            if (SilverlightSerializer.currentVersion >= 3)
            {
                SilverlightSerializer.Verbose = reader.ReadBoolean();
            }

            SilverlightSerializer.PropertyIds = new List <string>();
            SilverlightSerializer.KnownTypes  = new List <RuntimeTypeHandle>();
            var count = reader.ReadInt32();

            for (var i = 0; i < count; i++)
            {
                var typeName = reader.ReadString();
                var tp       = Type.GetType(typeName);
                if (tp == null)
                {
                    var map = new SilverlightSerializer.TypeMappingEventArgs
                    {
                        TypeName = typeName
                    };
                    SilverlightSerializer.InvokeMapMissingType(map);
                    tp = map.UseType;
                }
                if (tp == null)
                {
                    throw new ArgumentException(string.Format("Cannot reference type {0} in this context", typeName));
                }
                SilverlightSerializer.KnownTypes.Add(tp.TypeHandle);
            }
            count = reader.ReadInt32();
            for (var i = 0; i < count; i++)
            {
                SilverlightSerializer.PropertyIds.Add(reader.ReadString());
            }

            var data = reader.ReadBytes(reader.ReadInt32());

            _myStream = new MemoryStream(data);
            _reader   = new BinaryReader(_myStream);
            reader.Close();
            stream.Close();
        }
Пример #13
0
        public static T RetrieveFromPhoneState <T>(this Application app) where T : class
        {
            var modelKey = GetModelKey(typeof(T));

            if (PhoneApplicationService.Current.State.ContainsKey(modelKey))
            {
                using (var ms = new MemoryStream(PhoneApplicationService.Current.State[modelKey] as byte[]))
                {
                    return(SilverlightSerializer.Deserialize(ms) as T);
                }
            }

            return(null);
        }
        private static object GetVanilla(RuntimeTypeHandle type)
        {
            object vanilla;

            lock (Vanilla)
            {
                if (!Vanilla.TryGetValue(type, out vanilla))
                {
                    vanilla       = SilverlightSerializer.CreateObject(Type.GetTypeFromHandle(type));
                    Vanilla[type] = vanilla;
                }
            }
            return(vanilla);
        }
Пример #15
0
 public void ReloadAll()
 {
     if (File.Exists(_fileName))
     {
         try
         {
             var data = File.ReadAllBytes(_fileName);
             _storage = SilverlightSerializer.Deserialize(data) as DataStorage;
         }
         catch (Exception)
         {
             _storage = new DataStorage();
         }
     }
 }
Пример #16
0
        public static void SaveToPhoneState(this Application app, object model)
        {
            var modelKey = GetModelKey(model.GetType());

            if (PhoneApplicationService.Current.State.ContainsKey(modelKey))
            {
                PhoneApplicationService.Current.State.Remove(modelKey);
            }

            using (var ms = new MemoryStream())
            {
                SilverlightSerializer.Serialize(model, ms);
                PhoneApplicationService.Current.State.Add(modelKey, ms.GetBuffer());
            }
        }
Пример #17
0
        private void Load()
        {
            if (string.IsNullOrEmpty(Name))
            {
                return;
            }
            var fn = LocalSettings.DocumentPath + "\\" + Name + ".dat";

            if (File.Exists(fn))
            {
                var data = File.ReadAllBytes(fn);
                var ci   = SilverlightSerializer.Deserialize(data);
                ColumnInfo = (ObservableCollection <ColumnInfo>)ci;
            }
        }
        /// <summary>
        /// Set serialize packet
        /// </summary>
        /// <param name="obj">serialize class object</param>
        public void SetPacket(PacketStruct obj)
        {
            m_stream = new MemoryStream();
            switch (Mode)
            {
            case SerializerMode.DEFAULT:
            case SerializerMode.ALLOW_ALL_ASSEMBLY_VERSION_DESERIALIZATION:
                m_formatter.Serialize(m_stream, obj);
                break;

            case SerializerMode.SILVERLIGHT_SERIALIZER:
                SilverlightSerializer.Serialize(obj, m_stream);
                break;
            }
        }
Пример #19
0
        public void TestBasicPosition()
        {
            var testobj = new BasicGeoposition {
                Latitude = 52.155915, Longitude = 5.390376, Altitude = 10.0
            };

            var m = new MemoryStream();

            SilverlightSerializer.Serialize(testobj, m);
            m.Seek(0, SeekOrigin.Begin);

            var testObj2 = (BasicGeoposition)SilverlightSerializer.Deserialize(m);

            Assert.AreEqual(testobj, testObj2);
        }
Пример #20
0
        public void TestObjectWithSimpleProperties()
        {
            var testobj = new SimpleTestObject {
                Prop1 = 1, Prop2 = "BLABLA", Prop3 = 21.0
            };

            var m = new MemoryStream();

            SilverlightSerializer.Serialize(testobj, m);
            m.Seek(0, SeekOrigin.Begin);

            var testObj2 = (SimpleTestObject)SilverlightSerializer.Deserialize(m);

            Assert.AreEqual(testobj.Prop1, testObj2.Prop1);
            Assert.AreEqual(testobj.Prop2, testObj2.Prop2);
            Assert.AreEqual(testobj.Prop3, testObj2.Prop3);
        }
Пример #21
0
        public void SaveToStorage(object model)
        {
            var dataFileName = GetDataFileName(model.GetType());

            using (var appStorage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (appStorage.FileExists(dataFileName))
                {
                    appStorage.DeleteFile(dataFileName);
                }

                using (var iss = appStorage.CreateFile(dataFileName))
                {
                    SilverlightSerializer.Serialize(model, iss);
                }
            }
        }
        private static GetSet[][] GetAccessors(RuntimeTypeHandle type)
        {
            lock (PropertyAccess)
            {
                var index = (SilverlightSerializer.IsChecksum ? 1 : 0) + (SilverlightSerializer.IsChecksum && SilverlightSerializer.IgnoreIds ? 1 : 0);

                GetSet[][][] collection;
                if (!PropertyAccess.TryGetValue(type, out collection))
                {
                    collection           = new GetSet[3][][];
                    PropertyAccess[type] = collection;
                }
                var accessors = collection[index];
                if (accessors == null)
                {
                    var vanilla = GetVanilla(type);

                    var acs   = new List <GetSet>();
                    var props = SilverlightSerializer.GetPropertyInfo(type);
                    foreach (var p in props)
                    {
                        var gs     = typeof(GetSetGeneric <,>);
                        var tp     = gs.MakeGenericType(new Type[] { Type.GetTypeFromHandle(type), p.PropertyType });
                        var getSet = (GetSet)Activator.CreateInstance(tp, new object[] { p });
                        getSet.Vanilla = getSet.Get(vanilla);
                        acs.Add(getSet);
                    }
                    accessors    = new GetSet[2][];
                    accessors[0] = acs.ToArray();
                    acs.Clear();
                    var fields = SilverlightSerializer.GetFieldInfo(type);
                    foreach (var f in fields)
                    {
                        var gs     = typeof(GetSetGeneric <,>);
                        var tp     = gs.MakeGenericType(new Type[] { Type.GetTypeFromHandle(type), f.FieldType });
                        var getSet = (GetSet)Activator.CreateInstance(tp, new object[] { f });
                        getSet.Vanilla = getSet.Get(vanilla);
                        acs.Add(getSet);
                    }
                    accessors[1] = acs.ToArray();

                    collection[index] = accessors;
                }
                return(accessors);
            }
        }
        /// <summary>
        /// Default constructor
        /// </summary>
        /// <param name="packet">packet class object</param>
        /// <param name="serializerMode">serializer mode</param>
        public PacketSerializer(PacketStruct packet = null, SerializerMode serializerMode = SerializerMode.SILVERLIGHT_SERIALIZER)
        {
            m_formatter.AssemblyFormat = FormatterAssemblyStyle.Simple;

            m_stream = new MemoryStream();
            Mode     = serializerMode;
            switch (Mode)
            {
            case SerializerMode.DEFAULT:
            case SerializerMode.ALLOW_ALL_ASSEMBLY_VERSION_DESERIALIZATION:
                m_formatter.Serialize(m_stream, packet);
                break;

            case SerializerMode.SILVERLIGHT_SERIALIZER:
                SilverlightSerializer.Serialize(packet, m_stream);
                break;
            }
        }
        /// <summary>
        /// Clone and return packet class object
        /// </summary>
        /// <returns>cloned packet class object</returns>
        public PacketStruct ClonePacketObj()
        {
            PacketStruct retPacketObj = null;

            m_stream.Seek(0, SeekOrigin.Begin);
            switch (Mode)
            {
            case SerializerMode.ALLOW_ALL_ASSEMBLY_VERSION_DESERIALIZATION:
            case SerializerMode.DEFAULT:
                retPacketObj = (PacketStruct)m_formatter.Deserialize(m_stream);
                break;

            case SerializerMode.SILVERLIGHT_SERIALIZER:
                retPacketObj = (PacketStruct)SilverlightSerializer.Deserialize(m_stream);
                break;
            }
            return(retPacketObj);
        }
Пример #25
0
 public void SaveState()
 {
     try
     {
         using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
         {
             using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(Constants.PageStateFileName, FileMode.Create, store))
             {
                 //DataContractSerializer serializer = new DataContractSerializer(typeof(ApplicationState));
                 //serializer.WriteObject(stream, this);
                 SilverlightSerializer.Serialize(this, stream);
             }
         }
     }
     catch (Exception ex)
     {
     }
 }
Пример #26
0
        public void TestSimpleSerialize()
        {
            var bla = new ReflectionTestSubject();

            bla.MyList.Add("hallo");
            bla.MyList.Add("hallo2");
            bla.MyList.Add("hallo3");

            bla.MyString = "hoi";

            var m = new MemoryStream();

            SilverlightSerializer.Serialize(bla, m);
            m.Seek(0, SeekOrigin.Begin);

            var bla2 = SilverlightSerializer.Deserialize(m) as ReflectionTestSubject;

            Assert.AreEqual(bla.MyString, bla2.MyString);
            Assert.AreEqual(bla.MyList.Count, bla2.MyList.Count);
        }
Пример #27
0
        public async Task <T> RetrieveFromStorage()
        {
            try
            {
                var datafile = await GetDataFile();

                if (datafile != null)
                {
                    using (var fileStream = await datafile.OpenSequentialReadAsync())
                    {
                        return(SilverlightSerializer.Deserialize(fileStream.AsStreamForRead()) as T);
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex);
            }

            return(null);
        }
Пример #28
0
        public T RetrieveFromStorage()
        {
            using (var appStorage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                var dataFileName = GetDataFileName(typeof(T));
                if (appStorage.FileExists(dataFileName))
                {
                    using (var iss = appStorage.OpenFile(dataFileName, FileMode.Open))
                    {
                        try
                        {
                            return(SilverlightSerializer.Deserialize(iss) as T);
                        }
                        catch (Exception e)
                        {
                            System.Diagnostics.Debug.WriteLine(e);
                        }
                    }
                }
            }

            return(null);
        }
Пример #29
0
        public void TestDateTimeOffset3()
        {
            var testObj = new ComplexTestObject();
            var d1      = new DateTimeOffset(DateTime.UtcNow);
            var d2      = new DateTimeOffset(DateTime.Now);

            testObj.Alist.Add(d1);
            testObj.Alist.Add(d2);
            testObj.DateTime1 = d1;
            testObj.DateTime2 = d2;

            var m = new MemoryStream();

            SilverlightSerializer.Serialize(testObj, m);
            m.Seek(0, SeekOrigin.Begin);

            var testObj2 = (ComplexTestObject)SilverlightSerializer.Deserialize(m);

            Assert.AreEqual(testObj2.Alist[0], d1);
            Assert.AreEqual(testObj2.Alist[1], d2);
            Assert.AreEqual(testObj2.DateTime1, d1);
            Assert.AreEqual(testObj2.DateTime2, d2);
        }
Пример #30
0
        private void EncodeType(object item, Type storedType)
        {
            if (item == null)
            {
                WriteSimpleValue((ushort)0xFFFE);
                return;
            }

            var itemType = item.GetType().TypeHandle;

            //If this isn't a simple type, then this might be a subclass so we need to
            //store the type
            if (storedType == null || !storedType.Equals(item.GetType()) || SilverlightSerializer.Verbose)
            {
                //Write the type identifier
                var tpId = SilverlightSerializer.GetTypeId(itemType);
                WriteSimpleValue(tpId);
            }
            else
            {
                //Write a dummy identifier
                WriteSimpleValue((ushort)0xFFFF);
            }
        }