Feedback

C# - XML Objekt async mit FilePicker schreiben und lesen

Veröffentlicht von am 28.10.2015
(0 Bewertungen)
XML Objekte async mit FileSavePicker schreiben und mit FileOpenPicker lesen.
GFU-Schulungen  [Anzeige]

C# Aufbaukurs

Sie haben grundlegende .NET- und C#-Kenntnisse und und wollen diese nun erweitern. Der Aufbaukurs C# führt Sie ein die Arbeit mit Interfaces und Delegates, Generics und Parallel Computing.

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Windows.Storage;
using Windows.Storage.Pickers;
using System.Xml.Serialization;
using System.IO;

namespace XML
{
    public class WriteReadXML
    {

        /// <summary>
        /// Write XML File async with FilePicker
        /// </summary>
        /// <typeparam name="T">XML Class</typeparam>
        /// <param name="objectToWrite"></param>
        /// <param name="filename"></param>
        /// <returns></returns>
        public async Task Write_With_FileSavePicker<T>(T objectToWrite, string filename)
        {
            try
            {
                FileSavePicker writePicker = new FileSavePicker();

                // Set the file type to the store
                writePicker.FileTypeChoices.Add("XML Document", new List<string>() { ".xml" });

                // Default file name
                writePicker.SuggestedFileName = filename;

                // Initial search path
                writePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;

                // File selection
                StorageFile file = await writePicker.PickSaveFileAsync();
                if (file != null)
                {
                    // Write XML object to file
                    XmlSerializer serializer = new XmlSerializer(typeof(T));
                    var fileToken = Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.Add(file);
                    Stream stream = await file.OpenStreamForWriteAsync();
                    using (stream)
                    {
                        serializer.Serialize(stream, objectToWrite);
                    }
                    // Message "OK"		
                }
                else
                {
                    // Message "No selection"
                }
            }
            catch
            {
                // Message "Error reading"
            }
        }
        /// <summary>
        /// Read XML File async with FilePicker
        /// xml_Object = await $LoadXMLFile$<XML_Class>();
        /// </summary>
        /// <typeparam name="T">XML Class</typeparam>
        /// <returns>XML object or default(XML Class)</returns>
        public async Task<T> ReadXML_With_FileOpenPicker<T>()
        {
            try
            {
                FileOpenPicker readPicker = new FileOpenPicker();

                // Explorer type of advertisement
                readPicker.ViewMode = PickerViewMode.List;

                // nitial search path
                readPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;

                // Default of file types
                readPicker.FileTypeFilter.Add(".xml");

                // File selection
                StorageFile file = await readPicker.PickSingleFileAsync();
                if (file != null)
                {
                    // reads from a file and returns an XML object
                    T objectFromXml = default(T);
                    var serializer = new XmlSerializer(typeof(T));
                    Stream stream = await file.OpenStreamForReadAsync();
                    objectFromXml = (T)serializer.Deserialize(stream);
                    stream.Dispose();
                    return objectFromXml;
                }
                else
                {
                    // Message "No selection"
                }
            }
            catch
            {
                // Message "Error reading"
            }
            return default(T);
        }

    }
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!