Alors j'ai des classes:classe de type complexe ne pas être sérialisé par XmlSerializer
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
}
Et puis j'essaie sérialisation classA
, toutes les propriétés et la liste sont sérialisés correctement, à l'exception de la propriété ComplexTypeClass
. Pour cette propriété, je reçois une telle ligne dans xml <Total />
. Tous les classes ont [Serializable]
, [ComplexType]
, [XmlType]
attributs. J'ai essayé différentes combinaisons aussi. J'ai essayé d'utiliser [XmlElement]
, [XmlRoot]
sur la propriété ComplexTypeClass
. Cependant, cela n'a rien fait.
J'ai une autre classe de type complexe, qui n'a pas d'interface, et cette classe est sérialisée correctement.
Est-ce que ces interfaces doivent faire quelque chose? Ou est-ce que je manque quelque chose de simple et de petit?
Modifier: se débarrasser des interfaces n'a pas aidé.
Dans de tels cas, il est il est plus facile de sérialiser manuellement ce type complexe (par exemple, en tant que «chaîne»). Pour cela vous marquez la propriété existante avec '[XmlIgnore]' et créez une autre propriété (de type 'string'), dans getter/setter dont vous sérialiser/désérialiser la valeur de type complexe. De cette façon, 'XmlSerializer' n'a pas de problèmes pour sérialiser/désérialiser le type complet. – Sinatr
bien, je garderai cette option ouverte, mais comme je l'ai mentionné j'ai un autre type complexe et il est sérialisé correctement –
Le problème est que ComplexTypeClass n'a rien de sérialisable (les propriétés de getter-only sont [non sérialisées] (http://stackoverflow.com/a/13401220/1997232)). Cela n'a rien à voir avec la classe de base ou les interfaces (vous obtiendrez une exception dans ce cas). – Sinatr