我在这里有这段代码,我试图将类的实例中的每个字段保存到单独的文件中。我把它全部写出来了,但有些东西看起来并不合适。问题是它不引用包含数据的实例,只包含类型。那对我来说似乎并不合适。我正在使用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;
}
}
答案 0 :(得分:2)
虽然您的代码不完整,但我想我可以告诉您要做的事情。
您的示例实际上是序列化FieldInfo
对象,而不是字段。你想要替换:
filename = (string)field.GetValue("dataFile");
使用:
filename = field.Name;
同时替换:
serial.Serialize(dataStream, field );
使用:
serial.Serialize(dataStream, field.GetValue(data);
只需确保您的serial
对象能够序列化所有字段。
答案 1 :(得分:0)
您没有正确调用FieldInfo.GetValue method。它的参数应该是要提取其字段值的对象,或者对于静态字段为null。
也许你想通过这个来实现:
filename = (string)field.GetValue("dataFile");
这是(假设数据是感兴趣的实例)?
if (field.Name == "dataFile")
{
filename = (string)field.GetValue(data);
}