2011-11-28 15 views
6

मैंने अपना आवेदन कोडिंग पूरा किया। लेकिन जब मैं प्रारंभ बटन क्लिक करें, मेरे ऐप एक अपवाद उठाया ..: '(मुझे नहीं पता कि मेरी कक्षा को क्यों क्रमबद्ध नहीं किया जा सकता है

A first chance exception of type 'System.Runtime.Serialization.InvalidDataContractException' occurred in System.Runtime.Serialization.dll 
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll 
A first chance exception of type 'System.Runtime.Serialization.InvalidDataContractException' occurred in System.Runtime.Serialization.dll 

तो मैं का तर्क ई देखा' Application_UnhandledException ', और मैं कारण जान सकता "।' टाइप 'GPACalculator.Subject' धारावाहिक नहीं किया जा सकता। DataContractAttribute विशेषता के साथ अंकन, और आप DataMemberAttribute विशेषता के साथ धारावाहिक चाहते इसके सभी सदस्यों को अंकन पर विचार करें। "

मैं बस डिफ़ॉल्ट डेटा प्रकार का उपयोग कर मेरी कक्षा बनाने ..

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)); 
    } 
} 

ऊपर एम है y वर्ग ..

कृपया मुझे

उत्तर

11

प्रारंभ: [Serializable] वर्ग में जोड़े

+0

बहुत बहुत धन्यवाद :) –

6

मदद त्रुटि कहा गया है के रूप में आप वर्ग और DataMember विशेषता पर DataContract विशेषता के साथ इसे सजाने यह गुण है करने के लिए से serializable के रूप में अपने वर्ग को परिभाषित करने की जरूरत है। डेटामेम्बर के साथ सजाए गए केवल सार्वजनिक गुणों को क्रमबद्ध किया जा सकता है। आपके तरीके और घटनाएं नहीं कर सकती हैं।

[DataContract] 
public class Subject 
{ 
    [DataMember] 
    public string Name{get;set;} 
} 

More info here

0

दोनों वर्ग इस मामले में serializable होना चाहिए। उचित विशेषताओं के साथ अपनी कक्षाओं को सजाने द्वारा

[Serializable] 
public class Subject : ... 
2

आप विशेषता

[DataContract] 
public class Subject : ... 

या यह serializable तो जैसे निशान के साथ वर्ग अंकन की कोशिश कर सकते धारावाहिक के लिए आप उपयोग करना चाहते हैं, उदाहरण के लिए अनुबंध आधारित प्रारूपकों के लिए [Serializable] बाइनरीफॉर्मेटर के लिए, या [DataContract]

नोट: यदि आप [Serializable] विशेषता का उपयोग करते हैं, तो [field:NonSerialized] अन्यथा सभी श्रोताओं उन घटनाओं की रूप में अच्छी तरह धारावाहिक हो जाएगा के साथ घटना क्षेत्रों को चिह्नित करने के याद है।

0

यह प्रश्न अनावश्यक है।

How to ignore Event class member for binary serialization?

आप अपने वर्ग में [Serializable] विशेषता याद किया और इसलिए भी कि घटना serialable नहीं है तो आप अपने प्रतिनिधि घटना के लिए [field: NonSerialized] रूप में चिह्नित करने की जरूरत है।

संबंधित मुद्दे