Пример #1
0
        public static void Serialize <T>(T data, string filePath)
        {
            var xmlSerializer = CachingXmlSerializerFactory.Create(typeof(T));

            using (var streamWriter = new StreamWriter(filePath, false, new UTF8Encoding(false)))
            {
                xmlSerializer.Serialize(streamWriter, data);
            }
        }
Пример #2
0
        public static T Deserialize <T>(string filePath)
        {
            var xmlSerializer = CachingXmlSerializerFactory.Create(typeof(T));
            var xmlSettings   = new System.Xml.XmlReaderSettings()
            {
                CheckCharacters = false,
            };

            using (var streamReader = new StreamReader(filePath, new UTF8Encoding(false)))
                using (var xmlReader = System.Xml.XmlReader.Create(streamReader, xmlSettings))
                {
                    return((T)xmlSerializer.Deserialize(xmlReader));
                }
        }
Пример #3
0
        // シリアライズする
        public static async Task SerializeAsync <T>(T data, string filePath)
        {
            await _semaphore.WaitAsync(); // ロックを取得する

            try
            {
                var xmlSerializer = CachingXmlSerializerFactory.Create(typeof(T));
                using (var streamWriter = new StreamWriter(filePath, false, new UTF8Encoding(false)))
                {
                    await Task.Run(() => xmlSerializer.Serialize(streamWriter, data));

                    await streamWriter.FlushAsync();  // .NET Framework 4.5以降
                }
            }
            finally
            {
                _semaphore.Release(); // ロックを解放する
            }
        }
Пример #4
0
        // デシリアライズする
        public static async Task <T> DeserializeAsync <T>(string filePath)
        {
            await _semaphore.WaitAsync(); // ロックを取得する

            try
            {
                var xmlSerializer = CachingXmlSerializerFactory.Create(typeof(T));
                var xmlSettings   = new System.Xml.XmlReaderSettings()
                {
                    CheckCharacters = false,
                };
                using (var streamReader = new StreamReader(filePath, new UTF8Encoding(false)))
                    using (var xmlReader = System.Xml.XmlReader.Create(streamReader, xmlSettings))
                    {
                        return(await Task.Run(() => (T)xmlSerializer.Deserialize(xmlReader)));
                    }
            }
            finally
            {
                _semaphore.Release(); // ロックを解放する
            }
        }