public void Serialize <T>(string filePath, T data, DataContractSerializeOptions options = null)
        {
            try
            {
                if (_type == SerializeType.XmlDataContractSerialize)
                {
                    if (options == null)
                    {
                        throw new ArgumentException("DataContract Serializer needs a DataContractSerialzieOptions!");
                    }

                    SerializeWithDataContractInternal(data, filePath, options);
                }
                else if (_type == SerializeType.XmlSerialize)
                {
                    SerializeWithXmlSerializerInternal(data, filePath);
                }

                if (_type == SerializeType.XmlDataContractSerialize)
                {
                    var tempFilePathCompressed = GetTempFilePathCompressed(filePath);
                    FileCompressorDecompressor.CompressFileLZMA(filePath, tempFilePathCompressed);
                    File.Delete(filePath);
                    File.Move(tempFilePathCompressed, filePath);
                }
            }
            catch (Exception e)
            {
                throw new ArgumentException("Arquivo inválido - Serializador - Salvar", e);
            }
        }
        public void Deserialize <T>(string filePath, out T newData, DataContractSerializeOptions options = null)
        {
            if (_type == SerializeType.XmlDataContractSerialize)
            {
                if (options == null)
                {
                    throw new ArgumentException("DataContract Serializer needs a DataContractSerialzieOptions!");
                }

                DeserializeXmlDataContractSerializerInternal(filePath, out newData, options);
            }
            else if (_type == SerializeType.XmlSerialize)
            {
                DeserializeXmlSerializerInternal(filePath, out newData);
            }
            else
            {
                newData = default(T);
            }
        }
        private void SerializeWithDataContractInternal <T>(T data, string tempFilePath, DataContractSerializeOptions options)
        {
            var dcs = DataContractSerializeFactory.Create <T>(options);

            using (var file = File.Create(tempFilePath))
                using (var gzipFile = new GZipStream(file, CompressionMode.Compress))
                    using (var writer = XmlWriter.Create(gzipFile, new XmlWriterSettings {
                        Indent = true
                    }))
                    {
                        dcs.WriteObject(writer, data);
                    }
        }
        private void DeserializeXmlDataContractSerializerInternal <T>(string filePath, out T newData, DataContractSerializeOptions options)
        {
            var decompressFilePath = filePath + Guid.NewGuid();

            FileCompressorDecompressor.DecompressFileLZMA(filePath, decompressFilePath);

            var dcs = DataContractSerializeFactory.Create <T>(options);

            try
            {
                using (var gzipStream = new GZipStream(File.OpenRead(decompressFilePath), CompressionMode.Decompress))
                    using (var reader = XmlReader.Create(gzipStream))
                    {
                        newData = (T)dcs.ReadObject(reader);
                    }

                File.Delete(decompressFilePath);
            }
            catch (Exception e)
            {
                newData = default(T);
                throw new ArgumentException("Arquivo inválido - Serializador - Abrir", e);
            }
        }
Пример #5
0
 public static DataContractSerializer Create <T>(DataContractSerializeOptions options)
 {
     return(new DataContractSerializer(typeof(T), options.KnownTypes, options.MaxItensInObjectGraph, options.IgnoreDataExtensionObjects, options.PreserveObjectReferences, options.DataContractSurrogate, options.DataContractResolver));
 }