‘Data.TimeLineChartedDay ‘类型的对象无法转换为’Data.TimeLineChartedDay ‘类型?

我在VS2008中遇到以下Designer错误:

Object of type 'Data.TimeLineChartedDay[]' cannot be converted to type 'Data.TimeLineChartedDay[]'. 

???

 public class TimeLineDisplay { private List chartedDays = new List(); public List ChartedDays { get { return chartedDays; } set { chartedDays = value; } } } [Serializable] public class TimeLineChartedDay { private DateTime date; private int chartValue; public DateTime Date { get { return date; } set { date = value; } } public int ChartValue { get { return chartValue; } set { chartValue = value; } } public TimeLineChartedDay() { } } 

VS堆叠:

  at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) at System.Reflection.RtFieldInfo.InternalSetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture, Boolean doVisibilityCheck, Boolean doCheckConsistency) at System.Reflection.RtFieldInfo.InternalSetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture, Boolean doVisibilityCheck) at System.Runtime.Serialization.FormatterServices.SerializationSetValue(MemberInfo fi, Object target, Object value) at System.Runtime.Serialization.ObjectManager.CompleteObject(ObjectHolder holder, Boolean bObjectFullyComplete) at System.Runtime.Serialization.ObjectManager.DoNewlyRegisteredObjectFixups(ObjectHolder holder) at System.Runtime.Serialization.ObjectManager.RegisterObject(Object obj, Int64 objectID, SerializationInfo info, Int64 idOfContainingObj, MemberInfo member, Int32[] arrayIndex) at System.Runtime.Serialization.Formatters.Binary.ObjectReader.RegisterObject(Object obj, ParseRecord pr, ParseRecord objectPr, Boolean bIsString) at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ParseObjectEnd(ParseRecord pr) at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Parse(ParseRecord pr) at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run() 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) 

在此错误之前发生了以下情况:我添加了一个自编写的控件。 VS崩溃时出现以下消息:“Class TimeLineChartedDay未标记为可序列化”。 我发现这很奇怪,因为它写在另一台机器上,并没有抱怨’Serializable’属性。 我将该属性添加到了类中,并偶然发现了前面提到的错误。

您的控件正在尝试序列化类实例,但可能不应该。

您应该将[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]添加到公开TimeLineDisplay的属性中。

有关更具体的建议,请告诉我们您的控制权。

我对自定义控件有同样的问题。 虽然通过设计器添加控件失败并显示消息“类未标记为可序列化”,但它向Designer.cs文件添加了一个变量,并在.resx文件中添加了一个条目。

我不得不手动删除这些条目,一切运作良好。 对于resx文件,我右键单击 – >打开 – >源编辑器,搜索包含类名的条目并将其删除。

我有一个包含自定义控件的窗体的问题。 自定义控件具有自定义类X的公共属性。(类X是一个简单的DTO,可序列化,并包含默认构造函数。)表单设计器显示如下错误:

"Object of type “X” cannot be converted to object of type “X”"

如果双击表单.resx文件,resx设计器将显示表单的所有资源。 (注意:在设计器的左上角,有一个下拉按资源类型过滤)。 违规对象显示为一个行项目(在我的情况下,它是在“其他”类型下的监听)删除行项目并保存所有。