'Data.TimeLineChartedDay []'类型的对象无法转换为'Data.TimeLineChartedDay []'类型?

时间:2010-12-15 16:00:05

标签: c# .net visual-studio

我在VS2008中遇到以下设计器错误:

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

???

public class TimeLineDisplay     
{
    private List<TimeLineChartedDay> chartedDays = new List<TimeLineChartedDay>();

    public List<TimeLineChartedDay> 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 STACK:

    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'属性。我将该属性添加到了类中,并偶然发现了前面提到的错误。

3 个答案:

答案 0 :(得分:10)

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

您应该将[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]添加到公开TimeLineDisplay

的媒体资源中

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

答案 1 :(得分:2)

我在自定义控件上遇到了同样的问题。 虽然通过设计器添加控件失败了消息&#34; Class未标记为可序列化&#34;,但它向Designer.cs文件添加了一个变量,并在.resx文件中添加了一个条目。

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

答案 2 :(得分:1)

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

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

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