2016-05-19 7 views
0

So habe ich Klassen:Komplexe Typklasse nicht durch XmlSerializer serialisiert

public class classA : BaseClass 
{ 
    public classA(){} 
} 


public abstract class BaseClass 
{ 
    public ComplexTypeClass Total { get; set; } 
    public List<Item> Items {get; set; } 
    //some other properties 
} 


public class ComplexTypeClass : ValueObject<ComplexTypeClass> 
{ 
    public ComplexTypeClass() 
    { 
    } 
    public ComplexTypeClass(decimal p1, decimal p2, decimal p) 
    { 
     P1 = p1; 
     P2 = p2; 
     P3 = p3; 
    } 
    public decimal P1 { get; } 
    public decimal P2 { get; } 
    public decimal P3 { get; } 

    //some methods and validations 
} 


public abstract class ValueObject<T> : IEquatable<T>, IValidatableObject where T : ValueObject<T> 
{ 
    //all implemented interfaces methods 
} 

Und dann versuche ich classA serialisiert, alle Eigenschaften und Liste ordnungsgemäß serialisiert werden, mit Ausnahme der ComplexTypeClass Eigenschaft. Für diese Eigenschaft bekomme ich eine solche Zeile in xml <Total />. Alle Klassen haben [Serializable], [ComplexType], [XmlType] Attribute. Ich habe auch verschiedene Kombinationen ausprobiert. Ich habe versucht, [XmlElement], [XmlRoot] auf ComplexTypeClass Eigenschaft zu verwenden. Aber das hat nichts getan.

Ich habe eine andere komplexe Klasse, die keine Schnittstellen hat, und diese Klasse ist ordnungsgemäß serialisiert.

Müssen diese Schnittstellen etwas tun? Oder fehlt mir etwas Einfaches und Kleines?

Edit: loswerden von Schnittstellen hat nicht geholfen.

+0

In solchen Fällen besiedeln könnte es einfacher, diesen komplexen Typ manuell zu serialisieren (zB als "String"). Markieren Sie dazu die vorhandene Eigenschaft mit '[XmlIgnore]' und erstellen Sie eine andere Eigenschaft (vom Typ 'string'), in der Sie den Wert des komplexen Typs in Getter/Setter serialisieren/deserialisieren. Auf diese Weise haben 'XmlSerializer' keine Probleme beim Serialisieren/Deserialisieren des vollständigen Typs. – Sinatr

+0

Nun, ich werde diese Option offen halten, aber wie ich erwähnt habe ich einen anderen komplexen Typ und es ist richtig serialisiert –

+1

Das Problem ist, dass 'ComplexTypeClass' nichts serialisierbar (Getter-Only-Eigenschaften sind [nicht serialisiert] (http://stackoverflow.com/a/13401220/1997232)). Es hat nichts mit Basisklasse oder Schnittstellen zu tun (Sie würden in diesem Fall eine Ausnahme erhalten). – Sinatr

Antwort

0

Wenn jemand auf diese Art von Problem stolpert, so bescheiden @Sinatr darauf hingewiesen, ComplexTypeClass Eigenschaften

public decimal P1 { get; } 
public decimal P2 { get; } 
public decimal P3 { get; } 

nicht set haben, so XmlSerializer dieses Objekt nicht