Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我不知道';我不知道为什么我的类不能序列化_C#_Windows Phone 7_Data Binding_Serialization - Fatal编程技术网

C# 我不知道';我不知道为什么我的类不能序列化

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 {

我完成了应用程序的编码。但当我点击“开始”按钮时,我的应用程序引发了一个异常(

所以我看到了“Application\u UnhandledException”的参数e,我可以知道原因。 “类型”GPACalCultActudio。不能序列化。请考虑用DATACONTractAttor属性标记它,并标记要用DATAMEMBAREATION属性序列化的所有成员。“

” 我只是使用默认数据类型创建类

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 : ...