高分求解:设计窗体时,使用自定义控件,设计模式下窗体无法正常显示,但可以正常编译,提示某个自定义属性无法反序列化,帖子中提供了错误信息和源代码

nashina 2010-02-02 04:51:17
Windows设计器给出的错误提示:
One or more errors encountered while loading the designer. The errors are listed below. Some errors can be fixed by rebuilding your project, while others may require code changes.

Unable to load type System.Collections.Generic.List`1[[fcPhotoGallUpload.keywordManeger+ListItem, KeywordMan, Version=1.0.2235.34332, Culture=neutral, PublicKeyToken=null]] required for deserialization.
Hide

at System.Runtime.Serialization.ObjectManager.DoFixups()
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream)
at System.Resources.ResXDataNode.GenerateObjectFromDataNodeInfo(DataNodeInfo dataNodeInfo, ITypeResolutionService typeResolver)
at System.Resources.ResXDataNode.GetValue(ITypeResolutionService typeResolver)
at System.Resources.ResXResourceReader.ParseDataNode(XmlTextReader reader, Boolean isMetaData)
at System.Resources.ResXResourceReader.ParseXml(XmlTextReader reader)

这个窗体调用了一个我自己写的控件,里面有个属性ListItem
 
private List<MatchField> _MatchField = new List<MatchField>();
[Browsable(false)]
public List<MatchField> FieldList
{
get { return _MatchField; }
set
{
_MatchField = value;}
}

下面是MatchField这个类的定义:

[Serializable]
public class MatchField
{
private string _name;

public string Name
{
get { return _name; }
set { _name = value; }
}

private bool _isMultiMatch = false;

public bool isMultiMatch
{
get { return _isMultiMatch; }
set { _isMultiMatch = value; }
}


private string _preSource="";

public string preSource
{
get { return _preSource; }
set { _preSource = value; }
}
}


有碰到这种问题或者有解决方案的,请大家不吝赐教;
这个问题困扰我很久了,解决的话可以额外追加分数;
...全文
282 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xs1259411652 2011-08-18
  • 打赏
  • 举报
回复
属性前面添加标记:[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]


具体做法是什么?
nashina 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 tsinghua605 的回复:]
属性前面添加标记:[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[/Quote]
跟我找到的方法一样,经过测试,已经搞定了。

此外,推荐大家一个不错的帖子,我就是从这个帖子上找到解决灵感思路的:
http://social.msdn.microsoft.com/forums/en-US/winformsdesigner/thread/9a9e3421-7b08-48a7-9c04-48a910711024/
时刻准备中 2010-02-03
  • 打赏
  • 举报
回复
属性前面添加标记:[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
nashina 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wolf_knight 的回复:]
C# codeprivate IList<MatchField> _MatchField;public IList<MatchField> FieldList
{get {return _MatchField; }set
{if(MatchField== value)return;
_MatchField= value;
}
}
[/Quote]
看不明白,可以解释下吗
nashina 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lzsh0622 的回复:]
你程序中 fcPhotoGallUpload.keywordManeger+ListItem, KeywordMan 是什么
[/Quote]
就是fcPhotoGallUpload.keywordManeger.ListItem;
fcPhotoGallUpload.keywordManeger是命名空间;
ListItem是类,和我的自定义控件都在这个命名空间下
mayonglong 2010-02-02
  • 打赏
  • 举报
回复
碰到过,不过我重新打开VS似乎就好了
wolf_Knight 2010-02-02
  • 打赏
  • 举报
回复

private IList<MatchField> _MatchField;
public IList<MatchField> FieldList
{
get { return _MatchField; }
set
{
if(MatchField == value)
return;
_MatchField = value;
}
}

lzsh0622 2010-02-02
  • 打赏
  • 举报
回复
你程序中 fcPhotoGallUpload.keywordManeger+ListItem, KeywordMan 是什么
nashina 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wolf_knight 的回复:]
用IList试试。
[/Quote]
这个不是接口吗?我用的是List<自定义类>;
不一样吗?
nashina 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yangglemu 的回复:]
将自定义控件再修整一下,加上设计时支持,要保证设计模式时窗体能正常显示
[/Quote]
我试了几个设计时的方法,也不行,除非把这个属性remove掉
wolf_Knight 2010-02-02
  • 打赏
  • 举报
回复
用IList试试。
nashina 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lianshaohua 的回复:]
1、重新注册一下你的控年到工具箱,
2、清空sln,然后再rebuild sln

[/Quote]
这种方法不行,解决不了我现在遇到的情况
nashina 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zengzhan 的回复:]
PublicKeyToken=null 你控件用了强命名没有?
[/Quote]
您好,请问强命名是怎么回事,我在google中也找到类似的说法,有的说看是否强命名,但是我理解不了;
能详细说下吗
  • 打赏
  • 举报
回复
将自定义控件再修整一下,加上设计时支持,要保证设计模式时窗体能正常显示
nashina 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zqd5920 的回复:]
关掉vs  重新打开看看 !貌似我以前是这样解决的
[/Quote]
我以前也是这么解决的,但是最近发现有些情况下可以,很多情况下都不行,有时连编译都不行;
nashina 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 javak 的回复:]
你在你的每个Property上加上 [Serializable] 这个试试.
[/Quote]
我加了,也不行
qqzeng-ip 2010-02-02
  • 打赏
  • 举报
回复
PublicKeyToken=null 你控件用了强命名没有?
ztenv 2010-02-02
  • 打赏
  • 举报
回复
1、重新注册一下你的控年到工具箱,
2、清空sln,然后再rebuild sln
平生我自如 2010-02-02
  • 打赏
  • 举报
回复
关掉vs 重新打开看看 !貌似我以前是这样解决的
JavaK 2010-02-02
  • 打赏
  • 举报
回复
你在你的每个Property上加上 [Serializable] 这个试试.

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧