je les classes suivantes:DataContractSerializer pas sérialisation toutes les propriétés d'un objet personnalisé dans la collection
[Serializable]
[DataContract(Name = "LayerInfo", Namespace = "ems.gis")]
public abstract class LayerPersistInfo
{
public LayerPersistInfo() { }
public LayerPersistInfo(int index, MappingContextBase context)
{
Index = index;
Context = context;
}
[DataMember(Name="idx", Order=0)]
public int Index { get; set; }
//[DataMember(Name = "name")]
//public string Name { get; set; }
[DataMember(EmitDefaultValue = true, Name="ctx", Order=1)]
public MappingContextBase Context { get; set; }
[DataMember(EmitDefaultValue = false, Name="lyrs", Order=2)]
public LayersPersistInfo Children { get; set; }
public abstract TocItemModel GetLayerModel();
}
[Serializable]
[CollectionDataContract(Name = "lyrs", Namespace = "ems.gis", ItemName = "lyr")]
public class LayersPersistInfo : List<LayerPersistInfo>
{
}
Plusieurs instances de mises en œuvre concrètes de la classe abstraite LayerPersistInfo finissent dans LayersPersistInfo que je dois sérialisation. Ce que j'observe est très étrange.
Si LayersPersistInfo dispose de 2 ou plus d'articles avec les enfants, la propriété Contexte de chaque enfant de l'élément à l'index 0 est nul. Lors de la prochaine tentative de sérialisation après avoir repeuplé la collection, la propriété Context de chaque enfant de l'élément à l'index 1 de LayersPersistInfo est null. Lors de la tentative suivante, les enfants de l'élément 0 ont tous un contexte nul et ainsi de suite. Ce comportement est très cohérent.
Si ma collection personnalisée LayersPersistInfo comporte un seul élément, tous les enfants sont correctement sérialisés.
J'ai mis un point d'arrêt juste avant d'appeler WriteObject sur l'instance de sérialiseur et cette propriété n'est jamais nulle. Que pourrais-je faire de mal ici?
TIA.
;) – dss539