C# 从用户控件序列化错误
我创建了一个用户控件(CheckedDirTree),它公开了CheckedFolder属性,该属性反过来返回控件中已检查节点的FullPath属性的IEnumerable。大概是这样的:C# 从用户控件序列化错误,c#,C#,我创建了一个用户控件(CheckedDirTree),它公开了CheckedFolder属性,该属性反过来返回控件中已检查节点的FullPath属性的IEnumerable。大概是这样的: public IEnumerable<string> CheckedFolders { get { foreach (TreeNode node in treeView1.Nodes[0].DescendantNodes())
public IEnumerable<string> CheckedFolders
{
get
{
foreach (TreeNode node in treeView1.Nodes[0].DescendantNodes())
{
if(node.Checked && !node.FullPath.Equals(_directoryRoot))
yield return node.FullPath;
}
}
}
public IEnumerable CheckedFolders
{
得到
{
foreach(TreeView中的TreeNode节点1.Nodes[0].DegenantNodes())
{
if(node.Checked&!node.FullPath.Equals(_directoryRoot))
屈服返回节点.FullPath;
}
}
}
在网格中显示此cntrol并且用户检查了一些文件夹后,将此内容馈送到另一个类的(SYMBOLSHAREDTO)Folders属性:
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());
}
}
使用(var dirControl=new CheckedDirForm(symbolsShare))
{
if(dirControl.ShowDialog()==DialogResult.OK)
{
var symbolsShareObj=bindingSourceShare.Current作为SymbolShareModel;
如果(SYMBOLSHAREOBJ!=null)SYMBOLSHAREOBJ.Folders=dirControl.CheckedFolders;
}
}
[数据合同]
公共类符号共享到
{
公共符号共享到(){}
[数据成员]
公共字符串共享{get;set;}
[数据成员]
公共字符串备份到{get;set;}
[数据成员]
公共IEnumerable文件夹{get;set;}
公共重写字符串ToString()
{
返回string.Format(“共享:{0}{1}备份:{2}{3}文件夹:{4}”,共享,环境.NewLine,备份,
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.
无法序列化CheckedDirTree+d__6。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。
有什么想法吗?是否需要从CheckedFolders属性返回新列表
谢谢
Sunit使用
[DataContract]
适用于您的类()
和
[DataMember]
对于每个属性()您可能正试图通过WCF将SymbolsShareDto的实例发送到
您只需使用DataContractAttribute标记它,并使用DataMember标记所有属性:
[DataContract]
public class SymbolsShareDto
{
[DataMember]
public int Data1 { get; set;};
[DataMember]
public int Data2 { get; set;}
}
我希望这有帮助。执行
检查文件夹.ToArray()
并将其序列化。我已经标记了要使用DataContractSerializer的数据。看我的编辑,效果不错。做ToArray或ToList有什么好处/坏处吗?不,不是真的。但是,当序列化时,数组将更加紧凑。