我创建了一个公开CheckedFolder属性的用户控件(CheckedDirTree),该属性又返回控件中检查的Nodes的FullPath属性的IEnumerable。像这样:
public IEnumerable<string> CheckedFolders
{
get
{
foreach (TreeNode node in treeView1.Nodes[0].DescendantNodes())
{
if(node.Checked && !node.FullPath.Equals(_directoryRoot))
yield return node.FullPath;
}
}
}
这个cntrol在网格中显示并且用户检查了一些文件夹之后,它被送到另一个类(SymbolsShareDto)文件夹属性:
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());
}
}
然而,当我序列化SymbolsShareDto时,我收到错误说
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.
有什么想法?我是否需要从CheckedFolders属性返回一个新列表。
感谢 苏尼特
答案 0 :(得分:0)
答案 1 :(得分:0)
您可能正在尝试通过WCF发送SymbolsShareDto的实例。
您所要做的就是使用DataContractAttribute标记它,并使用DataMember标记所有属性:
[DataContract]
public class SymbolsShareDto
{
[DataMember]
public int Data1 { get; set;};
[DataMember]
public int Data2 { get; set;}
}
我希望这有帮助。
答案 2 :(得分:0)
执行CheckedFolders.ToArray()
并序列化。