2010-12-15 13 views
5

Estoy recibiendo el siguiente error de diseño en VS2008:El objeto de tipo 'Data.TimeLineChartedDay []' no se puede convertir a tipo '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 PILA:

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) 

Anterior a este error ocurrió lo siguiente: he añadido un control de sí mismo por escrito. VS se colgó con el siguiente mensaje: "Class TimeLineChartedDay no está marcado como serializable". Me pareció extraño porque estaba escrito en otra máquina, que no se quejó del atributo 'Serializable'. Agregué el atributo a la clase y tropecé con el error mencionado anteriormente.

+1

¿Por qué su clase está en un archivo ResX? – SLaks

+0

??? mi clase no está en un archivo resX ..., solo un archivo .cs estándar ... –

+0

Pero está siendo serializado en .ResX. ¿Por qué? – SLaks

Respuesta

10

Su control está tratando de serializar la instancia de la clase cuando probablemente no debería.

Probablemente deberías agregar [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] a la propiedad que expone el TimeLineDisplay.

Para obtener consejos más específicos, muéstrenos su control.

+0

Agregué el atributo, pero fue en vano ... Ahora recibo este error de diseñador: –

+0

[A] System.Collections.Generic.List'1 [Data.TimeLineChartedDay] no se puede convertir a [B] System.Collections .Generic.List'1 [Data.TimeLineChartedDay]. El tipo A se origina en 'mscorlib, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' en el contexto 'LoadNeither' en la ubicación 'C: \ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll' . El tipo B se origina en 'mscorlib, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' en el contexto 'LoadNeither' en la ubicación 'C: \ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll' . –

+3

Reconstruya su proyecto y reinicie Visual Studio. Es posible que también necesite editar manualmente designer.cs y/o .ResX para eliminar la lista. – SLaks

1

Tuve el mismo problema con un control personalizado. Aunque se ha producido un error al agregar el control a través del diseñador con el mensaje "La clase no está marcada como serializable", se agregó una variable al archivo Designer.cs y una entrada al archivo .resx.

Tuve que eliminar esas entradas a mano y todo funcionó bien. Para el archivo resx, hice clic derecho -> Abrir con -> Editor de origen y busqué entradas que contengan el nombre de clase y las eliminé.

+0

La edición del archivo resx lo hizo por mí. ¡Gracias, hombre! – CrazyTim

0

Tuve este problema con un Formulario que contiene un control personalizado. El control personalizado tenía una propiedad pública para una clase personalizada X. (Clase X era un DTO sencilla, serializable, y contenía un constructor por defecto.) El diseñador de formularios aparece un error como:

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

Si duplica haga clic en el archivo .resx de formularios, el diseñador de resx mostrará todos los recursos para el formulario. (nota: en la esquina superior izquierda del diseñador, hay un menú desplegable para filtrar por tipo de recurso). El objeto ofensivo aparece como una línea de pedido (en mi caso, fue liste debajo del tipo "otro"). Elimine la línea de pedido y guarde todo.

Cuestiones relacionadas