2010-12-15 8 views
5

ich die folgenden Designer Fehler in VS2008 bekommen:Objekt des Typs 'Data.TimeLineChartedDay []' kann nicht in den Typ 'Data.TimeLineChartedDay []' konvertiert werden?

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 Stach

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) 

Vor dieser Fehler aufgetreten der folgende: Ich habe eine selbst geschriebene Kontrolle. VS stürzte mit der folgenden Nachricht ab: "Class TimeLineChartedDay ist nicht als serialisierbar markiert". Ich fand das seltsam, weil es auf einer anderen Maschine geschrieben wurde, die sich nicht über das 'Serializable'-Attribut beklagen konnte. Ich fügte der Klasse das Attribut hinzu und stolperte über den erwähnten Fehler.

+1

Warum ist Ihre Klasse in einer ResX-Datei? – SLaks

+0

??? Meine Klasse ist nicht in einer resX-Datei .. ??, nur eine Standard-.cs-Datei .. –

+0

Aber es wird in eine .ResX serialisiert. Warum? – SLaks

Antwort

10

Ihr Steuerelement versucht, die Klasseninstanz zu serialisieren, wenn dies nicht wahrscheinlich ist.

Sie sollten wahrscheinlich [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] zu der Eigenschaft hinzufügen, die die TimeLineDisplay verfügbar macht.

Für genauere Beratung, bitte zeigen Sie uns Ihre Kontrolle.

+0

Ich habe das Attribut hinzugefügt, aber ohne Erfolg ... Ich erhalte jetzt diesen Designerfehler: –

+0

[A] System.Collections.Generic.List'1 [Data.TimeLineChartedDay] kann nicht in [B] System.Collections umgewandelt werden .Generic.List'1 [Data.TimeLineChartedDay]. Typ A stammt von 'mscorlib, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' im Kontext 'LoadNeither' am Speicherort 'C: \ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll' . Typ B stammt von 'mscorlib, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' im Kontext 'LoadNeither' am Speicherort 'C: \ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll' . –

+3

Erstellen Sie Ihr Projekt neu und starten Sie Visual Studio neu. Möglicherweise müssen Sie auch die Designer.cs und/oder die .ResX manuell bearbeiten, um die Liste zu entfernen. – SLaks

1

Ich hatte das gleiche Problem mit einem benutzerdefinierten Steuerelement. Obwohl das Hinzufügen des Steuerelements via Designer mit der Meldung "Klasse ist nicht als serialisierbar gekennzeichnet" fehlgeschlagen ist, wurde der Datei Designer.cs eine Variable und der Eintrag .resx hinzugefügt.

Ich musste diese Einträge von Hand entfernen und alles hat gut funktioniert. Für die Resx-Datei habe ich mit der rechten Maustaste -> Öffnen mit -> Quell-Editor geklickt und nach Einträgen gesucht, die den Klassennamen enthielten und entfernt.

+0

Bearbeiten der Resx-Datei hat es für mich getan. Vielen Dank, Mann! – CrazyTim

0

Ich hatte dieses Problem mit einem Formular, das ein benutzerdefiniertes Steuerelement enthält. Die individuelle Kontrolle hatte eine öffentliche Eigenschaft für eine benutzerdefinierte Klasse X. (Klasse X war ein einfaches DTO, serializable und enthielt einen Standardkonstruktor.) Der Formular-Designer angezeigt einen Fehler wie:

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

Wenn Sie verdoppeln Wenn Sie auf die RESX-Datei für Formulare klicken, zeigt der ResX-Designer alle Ressourcen für das Formular an. (Hinweis: In der oberen linken Ecke des Designers befindet sich eine Dropdown-Liste, um nach Ressourcentyp zu filtern). Das beanstandete Objekt wird als Werbebuchung angezeigt (in meinem Fall wurde es unter Typ "Sonstige" aufgeführt). Löschen Sie die Werbebuchung und speichern Sie alle.

Verwandte Themen