2010-12-15 108 views
5

我得到在VS2008以下設計錯誤:'Data.TimeLineChartedDay []'類型的對象無法轉換爲類型'Data.TimeLineChartedDay []'?

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崩潰與以下消息:「類TimeLineChartedDay未標記爲可序列化」。我發現這很奇怪,因爲它是寫在另一臺機器上的,它並沒有抱怨'Serializable'屬性。我將這個屬性添加到了課堂上,並且偶然發現了前面提到的錯誤。

+1

爲什麼你的課程在ResX文件中? – SLaks 2010-12-15 16:02:39

+0

???我的課程不在resX文件中.. ??,只是一個標準的.cs文件。 – 2010-12-15 16:09:33

+0

但它被序列化爲一個.ResX。爲什麼? – SLaks 2010-12-15 16:23:25

回答

10

您的控件嘗試序列化類實例時,它可能不應該。

您應該添加[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]到暴露TimeLineDisplay的財產。

如需更多具體建議,請向我們展示您的控制權。

+0

我添加了屬性,但無濟於事......我現在得到這個設計器錯誤: – 2010-12-15 16:20:18

+0

[A] System.Collections.Generic.List'1 [Data.TimeLineChartedDay]不能轉換爲[B] System.Collections .Generic.List'1 [Data.TimeLineChartedDay]。在位置'C:\ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll'的上下文'LoadNeither'中,類型A源自'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089' 。類型B源自位於'C:\ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll'位置的上下文'LoadNeither'中的'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089' 。 – 2010-12-15 16:21:41

+3

重建您的項目並重新啓動Visual Studio。您可能還需要手動編輯designer.cs和/或.ResX以刪除列表。 – SLaks 2010-12-15 16:22:43

1

我對自定義控件有同樣的問題。 儘管通過設計器添加控件失敗,並顯示消息「類未標記爲可序列化」,但它向Designer.cs文件添加了一個變量,並添加了一個.resx文件條目。

我不得不手動刪除這些條目,一切運行良好。對於resx文件,我做了右鍵單擊 - >打開方式 - >源代碼編輯器,搜索包含類名稱的條目並將其刪除。

+0

編輯resx文件爲我做了。感謝堆人! – CrazyTim 2016-04-27 02:34:35

0

我有一個包含自定義控件的窗體的這個問題。自定義控制有一個自定義類十一個公共屬性(X類是一個簡單的DTO,序列化的,並且包含一個默認的構造。)表單設計器顯示錯誤,如:

"Object of type 「X」 cannot be converted to object of type 「X」"

如果您雙擊單擊表單.resx文件,resx設計器將顯示錶單的所有資源。 (注意:在設計器的左上方,有一個下拉按照資源類型進行過濾)。違規對象顯示爲行項目(在我的情況下,它是在「other」類型下的監聽)刪除行項目並保存全部。

相關問題