0

クラスのインスタンスの各フィールドを個別のファイルに保存しようとしているこのコードがあります。私はそれをすべて書き出しましたが、何かが正しくないように見えます。問題は、データを含むインスタンスを参照せず、型だけを参照することです。そして、それは私にはまったく正しくないようです。System.Reflection を使用しています。では、インスタンスを参照するにはどうすればよいでしょうか。それとも私はすでにそれを知らないのですか?これが私のコードです:

public static void Save(appData data)
{
    string filename;
    // this does not accept the variable "data", only the class spec "appData"
    var fields = typeof(appData).GetFields(BindingFlags.Instance);
    foreach (FieldInfo field in fields)
    {
        try
        {
            filename = (string)field.GetValue("dataFile");
        }
        catch (Exception e)
        {

            Console.WriteLine(e.Message);
            Console.ReadLine();
        }
        dataStream = new FileStream(filename,
            FileMode.Truncate, FileAccess.Write,
            FileShare.Read);
        serial.Serialize(dataStream, field );
        dataStream.Flush();
        dataStream.Close();
        dataStream = null;
    }

}
4

2 に答える 2

2

あなたのコードは不完全ですが、何をしようとしているのかわかると思います。

あなたの例は、実際にFieldInfoはフィールドではなくオブジェクトをシリアル化しています。置き換えたい:

filename = (string)field.GetValue("dataFile");

と:

filename = field.Name;

以下も置き換えます。

serial.Serialize(dataStream, field );

と:

serial.Serialize(dataStream, field.GetValue(data);

すべてのフィールドがオブジェクトによってシリアル化できることを確認してくださいserial

于 2012-07-15T02:00:15.567 に答える
0

FieldInfo.GetValue メソッドを正しく呼び出していません。その引数は、抽出するフィールド値を持つオブジェクト、または静的フィールドの null である必要があります。

たぶん、これで達成しようとしていたこと:

filename = (string)field.GetValue("dataFile");

これは (データが対象のインスタンスであると仮定して) でしたか?

if (field.Name == "dataFile")
{
    filename = (string)field.GetValue(data);
}
于 2012-07-15T02:02:02.990 に答える