Isolated Storage Serializer

Kiedy pisze się już któryś z rzędu program na daną platformę, często sięgamy do swoich poprzednich programów, żeby skopiować jakąś funkcję albo całą klasę, bo czegoś podobnego właśnie potrzebujemy. Klasa zapisana poniżej, się chyba w każdym projekcie windows phonowym. Dzięki niej za pomocą jednej metody można zserializować lub zdeserializować obiekt do/z isolated storage.

 public class IsolatedStorageSerializer<T>
    where T : class
{
    public void Serialize(T objectToSerialize, string path)
    {
        if (String.IsNullOrEmpty(path) || objectToSerialize == null)
            return;

        using (var isolated = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (isolated.FileExists(path)) isolated.DeleteFile(path);

            Stream stream = null;
            try
            {
                stream = isolated.OpenFile(path, FileMode.OpenOrCreate, FileAccess.Write);
                var serializer = new XmlSerializer(typeof(T));
                serializer.Serialize(stream, objectToSerialize);
            }
            finally
            {
                if (stream != null) stream.Close();
            }
        }
    }

    public T Deserialize(string path)
    {
        T result = null;
        if (!String.IsNullOrEmpty(path))
        {
            using (var isolated = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (isolated.FileExists(path))
                {
                    Stream stream = null;
                    try
                    {
                        stream = isolated.OpenFile(path, FileMode.Open, FileAccess.Read);
                        var serializer = new XmlSerializer(typeof(T));
                        result = serializer.Deserialize(stream) as T;
                    }
                    finally
                    {
                        if (stream != null) stream.Close();
                    }
                }
            }
        }
        return result;
    }
}

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *