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 回答