我遇到了这种错误:
非静态字段,方法或属性'object.GetType()'
需要对象引用
XmlSerializer rd = new XmlSerializer(Roll.GetType())
类:
public class Roll
{
public int Code = 0;
public string Name = "";
public DateTime Date = DateTime.MinValue;
}
如果您需要更多信息,请告诉我。
谢谢
答案 0 :(得分:3)
实际上,这意味着您应该使用typeof(Roll)
而不是Roll.GetType()
。即,
XmlSerializer rd = new XmlSerializer(typeof(Roll));
Techincally,这意味着Roll
是一个类,GetType()
是该类的有效实例方法(通过继承),但它不是有效的静态方法。因此,如果myRoll.GetType()
是myRoll
类型的对象实例,则可以调用Roll
,但无法调用Roll.GetType()
。
答案 1 :(得分:1)
这意味着为了在GetType()
上调用(即调用)Roll
方法,您需要一个Roll
类型的对象实例,因为GetType()
方法不是静态方法。
正如其他人所说,使用typeof
如下。
XmlSerializer rd = new XmlSerializer(typeof(Roll));
您是否尝试将Roll
个实例序列化为文件或其他内容
?如果是,请尝试以下示例。
例如:
private void SerializeRoll(string filename)
{
XmlSerializer rd = new XmlSerializer(typeof(Roll));
// Instantiate Roll, fill it with data.
Roll oneRoll = new Roll();
oneRoll.Code = 1;
oneRoll.Name = "Test Code";
TextWriter writer = new StreamWriter(filename);
ser.Serialize(writer, oneRoll );
writer.Close();
}
答案 2 :(得分:1)
您希望将Type
类的Roll
对象传递给XmlSerializer
构造函数,但是您正在使用GetType()
函数,这是一个实例方法而不是静态方法。需要从对象调用实例方法,而不是静态方法,可以从类本身调用。
为了做到你想要的,没有Roll
类型的对象,请使用
XmlSerializer rd = new XmlSerializer(typeof(Roll));
typeof
运算符返回一个Type
对象,描述作为参数传递的类。