2010-12-15 9 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

+0

???私のクラスはresXファイル..ではなく、標準の.csファイルです。 –

+0

しかし、それは.ResXにシリアル化されています。どうして? – SLaks

答えて

10

あなたのコントロールは、おそらくクラスインスタンスを直列化しようとしていません。

TimeLineDisplayを公開するプロパティには、おそらく[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]を追加する必要があります。

具体的なアドバイスについては、あなたのコントロールを表示してください。

+0

属性を追加しましたが、役に立たない...私は今このデザイナーエラーを取得しています: –

+0

[A] System.Collections.Generic.List'1 [Data.TimeLineChartedDay]を[B] System.Collectionsにキャストできません.Generic.List'1 [Data.TimeLineChartedDay]。タイプAは、場所 'C:\ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll'のコンテキスト 'LoadNeither'の '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' 。 –

+3

プロジェクトを再ビルドし、Visual Studioを再起動します。また、designer.csおよび/または.ResXを手作業で編集して、リストを削除する必要があります。 – SLaks

1

私はカスタムコントロールで同じ問題がありました。 デザイナー経由でコントロールを追加すると、「クラスがシリアル化可能とマークされていません」というメッセージが表示されませんでしたが、Designer.csファイルと.resxファイルのエントリに変数が追加されました。

これらのエントリを手作業で削除しなければならず、すべてがうまくいきました。 resxファイルについては、右クリック - >開く - >ソースエディタをクリックし、クラス名を含むエントリを検索して削除しました。

+0

resxファイルを編集してくれました。感謝のヒープ男! – CrazyTim

0

カスタムコントロールを含むフォームでこの問題が発生しました。カスタムコントロールは、カスタムクラスX用のパブリックプロパティを持っていた(クラスXはシリアライズシンプルなDTO、だった、とデフォルトコンストラクタが含まれています。)フォームデザイナは次のようにエラーが表示される:

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

あなたが倍増した場合フォーム.resxファイルをクリックすると、resxデザイナーはフォームのすべてのリソースを表示します。 (注:デザイナーの左上には、リソースタイプ別に絞り込むためのドロップダウンがあります)。違反しているオブジェクトは広告申込情報として表示されます(私の場合、広告タイプは「その他」になっています)。広告申込情報を削除してすべてを保存します。

関連する問題