情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

C#でシリアライズして保存、開いてデシリアライズ

WCFのクラスを使っています。よく使うので拡張メソッド化しました。

public static class Extension3
{
    //ファイルを開きデータを取得する
    public static T1 OpenFileAndGetData(this T1 t1, string _fileName) where T1 : new()
    {
        try
        {
            using (FileStream fileStream = new FileStream(_fileName, FileMode.Open))
            {
                return t1 = (T1)(new DataContractSerializer(typeof(T1))).ReadObject(XmlDictionaryReader.CreateTextReader(fileStream, new XmlDictionaryReaderQuotas()), true);
            }
        }
        catch
        {
            return t1 = new T1();
        }
    }

    //データをファイルに保存する
    public static void SaveDataToFile(this T1 _t1, string _fileName) where T1 : new()
    {
        try
        {
            using (FileStream fileStream = new FileStream(_fileName, FileMode.Create))
            {
                (new DataContractSerializer(typeof(T1))).WriteObject(fileStream, _t1);
            }
        }
        catch (Exception ex)
        {
            throw new Exception(string.Format("\"{0}\"の保存に失敗しました。", _fileName), ex);
        }
    }
}

使用時は対象オブジェクトにDataContractDataMenber属性の指定を忘れずに。

[DataContract]
public class Project
{
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string Location { get; set; }
    [DataMember]
    public List<string> Items { get; set; }
    [DataMember]
    public Dictionary<string, List<string>> Tags { get; set; }

    public Project() {? ・・・? }

    public static void Save(Project _project)
    {
        _project.SaveDataToFile(_project.Location + "\\" + _project.Name + ".wmproj");
    }

    public static Project Open(string _path)
    {
        return new Project().OpenFileAndGetData(_path);
    }
}
pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-C#