C# 我不知道';我不知道为什么我的类不能序列化
我完成了应用程序的编码。但当我点击“开始”按钮时,我的应用程序引发了一个异常( 所以我看到了“Application\u UnhandledException”的参数e,我可以知道原因。 “类型”GPACalCultActudio。不能序列化。请考虑用DATACONTractAttor属性标记它,并标记要用DATAMEMBAREATION属性序列化的所有成员。“” 我只是使用默认数据类型创建类C# 我不知道';我不知道为什么我的类不能序列化,c#,windows-phone-7,data-binding,serialization,C#,Windows Phone 7,Data Binding,Serialization,我完成了应用程序的编码。但当我点击“开始”按钮时,我的应用程序引发了一个异常( 所以我看到了“Application\u UnhandledException”的参数e,我可以知道原因。 “类型”GPACalCultActudio。不能序列化。请考虑用DATACONTractAttor属性标记它,并标记要用DATAMEMBAREATION属性序列化的所有成员。“” 我只是使用默认数据类型创建类 public class Subject : INotifyPropertyChanged {
public class Subject : INotifyPropertyChanged
{
private string name;
private GradePoint gradePoint;
private int credit;
public Subject(string name)
{
Name = name;
GradePoint = new GradePoint();
}
public string Name
{
get { return name; }
set
{
Debug.WriteLine("Name: " + value);
if (name != value)
{
name = value;
OnPropertyChanged("Name");
}
}
}
public GradePoint GradePoint
{
get { return gradePoint; }
set
{
if (gradePoint != value)
{
gradePoint = value;
OnPropertyChanged("GradePoint");
}
}
}
public int Credit
{
get { return credit; }
set
{
if (credit != value)
{
credit = value;
OnPropertyChanged("Credit");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public class GradePoint : INotifyPropertyChanged
{
private string mainGradePoint;
private string subGradePoint;
private int credit;
public int Credit
{
get { return credit; }
set
{
if (credit != value)
{
credit = value;
OnPropertyChanged("Credit");
}
}
}
public string MainGradePoint
{
get { return mainGradePoint; }
set
{
value = value.ToUpper();
if (mainGradePoint != value)
{
mainGradePoint = value;
OnPropertyChanged("MainGradePoint");
}
}
}
public string SubGradePoint
{
get { return subGradePoint; }
set
{
if (subGradePoint != value)
{
subGradePoint = value;
OnPropertyChanged("SubGradePoint");
}
}
}
public override string ToString()
{
return string.Format("{0}{1}", mainGradePoint, subGradePoint);
}
public double ToDouble(double perfectScore = 4.5F)
{
double gap = perfectScore - Math.Floor(perfectScore);
double value;
switch (mainGradePoint)
{
case "A":
value = 4.0;
break;
case "B":
value = 3.0;
break;
case "C":
value = 2.0;
break;
case "D":
value = 1.0;
break;
default:
value = 0.0;
return value;
}
switch (subGradePoint)
{
case "+":
value += gap;
break;
case "-":
value -= gap;
break;
}
return value;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
以上是我的班级
请帮助我因为错误说明您需要通过在类上使用DataContract属性对类进行修饰,并将DataMember属性对其属性进行修饰,从而将类定义为可序列化的。只能序列化使用DataMember修饰的公共属性。您的方法和事件无法序列化
[DataContract]
public class Subject
{
[DataMember]
public string Name{get;set;}
}
在这种情况下,两个类都应该是可序列化的。将[serializable]添加到类中您可以尝试使用属性标记该类
[DataContract]
public class Subject : ...
或者将其标记为可序列化,如下所示:
[Serializable]
public class Subject : ...
首先,使用要使用的序列化程序的适当属性装饰类,例如,对于BinaryFormatter,使用
[Serializable]
,对于基于协定的格式化程序,使用[DataContract]
注意:如果使用[Serializable]属性,请记住用
[field:NonSerialized]
标记事件字段,否则这些事件的所有侦听器也将被序列化。这个问题是多余的
您在类中缺少了[Serializable]
属性,而且由于事件不可序列化,您需要将其标记为代理事件的[field:NonSerialized]
[Serializable]
public class Subject : ...