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.
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
Nun, ich werde diese Option offen halten, aber wie ich erwähnt habe ich einen anderen komplexen Typ und es ist richtig serialisiert –
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