1

クラスを使用してクラスをシリアル化/逆シリアル化しJson.Net、ファイルとの間でクラスを保存/ロードする2つのメソッドを作成しようとしています。これが私のコードです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Newtonsoft.Json;
using System.Security.Cryptography;
using System.Text.RegularExpressions;

namespace System
{
    public static class SystemExtentions
    {
        public static void SaveToFile(this object data, string FileName)
        {
            using (StreamWriter writer = new StreamWriter(FileName))
            {
                string s = JsonConvert.SerializeObject(data);
                writer.Write(s);
                writer.Close();
            }
        }

        public static void LoadFromFile<t>(t date,string FileName)
        {
            using (StreamReader reader = new StreamReader(FileName))
            {

                data = JsonConvert.DeserializeObject<t>(reader.ReadToEnd());
                reader.Close();
            }
        }
    }
}

しかし、LoadFromFileメソッドでdata = JsonConvert.DeserializeObject<t>(reader.ReadToEnd());は機能しません!これは、私がこのコードを持っていた場合、次のことを意味します。

Class1 c1=new Class1();
c1.LoadFromFile<Class1>("c1.clf");

コードの実行後、のプロパティはc1変更されません。

理由を知りたいのですが、クラスを変更したり、そのプロパティLoadFromFileを独立した(クラスのタイプとプロパティに依存しない)(動的に)方法で設定(逆シリアル化!)するための解決策はありますか?

4

1 に答える 1

5

LoadFromFileメソッドは、tメソッド内で割り当てているタイプのパラメーターを取ります。これは意味がありません。代わりに、戻り値を使用してください。

public static T LoadFromFile<T>(string fileName)
{
    using (StreamReader reader = new StreamReader(FileName))
    {
       return JsonConvert.DeserializeObject<T>(WpfApplication.Helper.Decrypt(reader.ReadToEnd()));
    }
}

これにより、次のようなコードを使用できるようになります。

Class1 c1 = LoadFromFile<Class1>("c1.clf");

補足:using構成を使用する場合、ストリームリーダーを明示的に閉じる必要はありません

于 2012-10-09T12:52:41.757 に答える