2017-06-20 3 views
0

Unten ist die Klasse, die ich zu serialisieren versuche.Ausnahmebedingung beim Serialisieren der benutzerdefinierten Sammlung

Ich bekomme Ausnahme während Serialize, es funktioniert für Deserialize von XML.

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public class Organization 
{ 
    private string _name; 

    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name = value; 
     } 
    } 

    private HasParentObservableCollection<Employee> _emp; 

    [System.Xml.Serialization.XmlElementAttribute("Employee")] 
    public HasParentObservableCollection<Employee> Emp 
    { 
     get 
     { 
      return _emp; 
     } 
     set 
     { 
      _emp = value; 
     } 
    } 

    public Organization(string name, HasParentObservableCollection<Employee> emp) 
    { 
     Emp = emp; 
     Name = name; 
    } 
} 

Während Serialize Methodenaufruf Ich erhalte Ausnahmemeldung - There was an error generating the XML document.

I markiert Serializable Attribut auf HasParentObservableCollection Klasse

[Serializable] 
public class HasParentObservableCollection<T> : ObservableCollection<T> 
{ 
    protected override void InsertItem(int index, T item) 
    { 
     //set the parent object when a new item is added to our collection 
     if (item != null && item is IHasParent) 
      (item as IHasParent).Parent = this; 

     base.InsertItem(index, item); 
    } 
} 

Unten ist die Serialisierungscode

Organization org1 = new Organization("org11", new HasParentObservableCollection<Employee>() { new Employee("AA", "AA"), new Employee("AA", "AA") }); 
Organization org2 = new Organization("org22", new HasParentObservableCollection<Employee>() { new Employee("BB", "BB"), new Employee("AA", "AA") }); 
ObservableCollection<Organization>() Org = new ObservableCollection<Organization>() { org1, org2}; 


XmlSerializer serializer = new XmlSerializer(typeof(Organization)); 
StringWriter sw = new StringWriter(); 
XmlTextWriter tw = new XmlTextWriter(sw); 
XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
ns.Add("", ""); 
serializer.Serialize(tw, Org, ns); 
+0

Welche Serializer verwenden Sie? Können Sie den Codestück einbeziehen, der die Serialisierung durchführt? –

+0

Aktualisierter Code ... – superuser

Antwort

1

Ein paar Fragen hier:

1) Klassen von XmlSerializer serialisiert haben öffentliche parametless Konstruktor haben:

public class Organization { public Organization() {} ... } 
public class Employee { public Employee() {} ... } 

2) Sie den Typ nicht Serialisierung für die Sie die XmlSerializer Instanz erstellt haben

var serializer = new XmlSerializer(typeof(ObservableCollection<Organization>)); 

3) Sie können [Serializable] Tag - das ist für XML-Serialisierung ignoriert

Verwandte Themen