2010-12-15 4 views
5

Je reçois l'erreur Designer suivante dans VS2008:L'objet de type 'Data.TimeLineChartedDay []' ne peut pas être converti en type '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) 

Avant cette erreur ce qui suit recontrés: 'Je ajouté un contrôle auto écrit. VS s'est écrasé avec le message suivant: "Class TimeLineChartedDay n'est pas marqué comme sérialisable". J'ai trouvé cela étrange parce qu'il était écrit sur une autre machine, qui ne se plaignait pas de l'attribut 'Serializable'. J'ai ajouté l'attribut à la classe, et trébuché sur l'erreur mentionnée préive.

+1

Pourquoi votre classe est-elle dans un fichier ResX? – SLaks

+0

??? ma classe n'est pas dans un fichier resX .. ??, juste un fichier .cs standard .. –

+0

Mais il est en cours de sérialisation dans un fichier .ResX. Pourquoi? – SLaks

Répondre

10

Votre contrôle tente de sérialiser l'instance de la classe alors qu'elle ne devrait probablement pas le faire. Vous devez probablement ajouter [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] à la propriété qui expose le TimeLineDisplay.

Pour des conseils plus spécifiques, veuillez nous montrer votre commande.

+0

J'ai ajouté l'attribut, mais en vain ... Je reçois maintenant cette erreur de concepteur: –

+0

[A] System.Collections.Generic.List'1 [Data.TimeLineChartedDay] ne peut pas être converti en [B] System.Collections .Generic.List'1 [Data.TimeLineChartedDay]. Le type A provient de 'mscorlib, Version = 2.0.0.0, Culture = neutre, PublicKeyToken = b77a5c561934e089' dans le contexte 'LoadNeither' à l'emplacement 'C: \ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll' . Le type B provient de 'mscorlib, Version = 2.0.0.0, Culture = neutre, PublicKeyToken = b77a5c561934e089' dans le contexte 'LoadNeither' à l'emplacement 'C: \ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll' . –

+3

Recréez votre projet et redémarrez Visual Studio. Vous devrez également modifier manuellement le fichier designer.cs et/ou le fichier .ResX pour supprimer la liste. – SLaks

1

J'ai eu le même problème avec un contrôle personnalisé. Bien que l'ajout du contrôle via le concepteur ait échoué avec le message "La classe n'est pas marquée comme sérialisable", elle a ajouté une variable au fichier Designer.cs et une entrée au fichier .resx.

J'ai dû supprimer ces entrées à la main et tout a bien fonctionné. Pour le fichier RESX j'ai fait un clic droit -> Ouvrir avec -> Éditeur de la source et recherché des entrées contenant le nom de la classe et les supprimés.

+0

L'édition du fichier resx l'a fait pour moi. Merci tas homme! – CrazyTim

0

J'ai rencontré ce problème avec un formulaire contenant un contrôle personnalisé. Le contrôle personnalisé avait une propriété publique pour une classe personnalisée X. (classe X était simple DTO, sérialisable, et contenait un constructeur par défaut.) Le concepteur de formulaire affiché une erreur comme:

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

Si vous double cliquez sur le fichier .resx formes, le concepteur resx affichera toutes les ressources pour le formulaire. (note: en haut à gauche du concepteur, il y a une liste déroulante à filtrer par type de ressource). L'objet incriminé apparaît sous la forme d'un élément de ligne (dans mon cas, il était liste sous le type "autre") Supprimer l'élément de campagne et enregistrer tout.

Questions connexes