J'ai créé un contrôle utilisateur (CheckedDirTree) qui expose une propriété CheckedFolder qui à son tour renvoie un IEnumerable de la propriété FullPath des nœuds vérifiés dans le contrôle. Quelque chose comme ceci:Erreur de sérialisation du contrôle utilisateur
public IEnumerable<string> CheckedFolders
{
get
{
foreach (TreeNode node in treeView1.Nodes[0].DescendantNodes())
{
if(node.Checked && !node.FullPath.Equals(_directoryRoot))
yield return node.FullPath;
}
}
}
Ceci est alimenté à (SymbolsShareDto) la propriété des dossiers d'une autre classe après cntrol est représenté dans une grille et l'utilisateur a vérifié certains dossiers:
using (var dirControl = new CheckedDirForm(symbolsShare))
{
if (dirControl.ShowDialog() == DialogResult.OK)
{
var symbolsShareObj = bindingSourceShare.Current as SymbolShareModel;
if (symbolsShareObj != null) symbolsShareObj.Folders = dirControl.CheckedFolders;
}
}
[DataContract]
public class SymbolShareDTO
{
public SymbolShareDTO(){}
[DataMember]
public string Share { get; set; }
[DataMember]
public string BackupTo { get; set; }
[DataMember]
public IEnumerable<string> Folders { get; set; }
public override string ToString()
{
return string.Format("Share: {0}{1}BackupTo: {2}{3}Folders: {4}", Share, Environment.NewLine, BackupTo,
Environment.NewLine, Folders.Count());
}
}
Cependant quand je sérialiser le SymbolsShareDto, je reçois une erreur en disant
CheckedDirTree+<get_CheckedFolders>d__6' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute.
Des pensées? Ai-je besoin de renvoyer une nouvelle propriété List from CheckedFolders à la place.
grâce Sunit
Cela a bien fonctionné. Y at-il des avantages/inconvénients à faire ToArray ou ToList? – Sunit
Non, pas vraiment. Un tableau sera plus compact quand il est sérialisé. – leppie