2

私が XmlSerializer で抱えていたこの問題について、誰かが私を助けてくれることを願っています。

私はすでにこのスレッドを見てきました: http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/551cee76-fd80-48f8-ac6b-5c22c234fecf/

私が得ているエラーは次のとおりです。

System.InvalidOperationException: 一時クラスを生成できません (結果 = 1)。エラー CS0012: 型 'System.Data.Objects.DataClasses.EntityObject' は、参照されていないアセンブリで定義されています。アセンブリ 'System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' への参照を追加する必要があります。

単体テストに System.Data.Entity への参照があることを確認したので、少なくともコンパイルできます。また、app.config で System.Data.Entity へのアセンブリ バインディングを作成しました。

これが私の大まかなクラス構造です

[Serializable] 
[XmlRoot(Namespace = XmlSupport.MyNamespace, ElementName = XmlSupport.WantToSerialize)] 
[XmlInclude(typeof(WantToSerializeBaseClass)]
[XmlInclude(typeof(EntityObject)]
[XmlInclude(typeof(MyEntityObjectSubClass)]
public class WantToSerialize : WantToSerializeBaseClass, IXmlSerializable  (I've tried putting this on the baseclass and the current class)
{
  // methods and classes 
  // I've included XmlIncludes for all the classes that this class has a reference too
  //  even though in the WriteXml it just uses .NET base classes
}

WantToSerializeBaseClass はいくつかのジェネリックを使用しますが、(EntityObject およびそれが参照するその他のクラスも) XmlIncludes で装飾しました。

呼び出しコード:

var serializerWrite = new XmlSerializer(typeof (WantToSerialize), XmlSupport.ITNNamespace); 

失敗する

しかし、もしそうなら:

var serializerWrite = new XmlSerializer(typeof (WantToSerialize), new Type[] {typeof(EntityObject)}); 

それは成功です。

どんな考えでも最も役に立ちます。

UPDATED WantToSerializeBaseClass のメソッドまで問題を追跡しました

public abstract void ConvertFromEntity<TtoCopy>(TtoCopy toCopy) where TtoCopy : MyEntityObjectSubClass;

MyEntityObjectSubClass は EntityObject のサブクラスであり、エンティティ オブジェクトに必要ないくつかのメソッドを追加します。MyEntityObjectSubClass は次のようになります。

[Serializable]
[XmlInclude(typeof(EntityObject))]
public abstract class MyEntityObjectSubClass : EntityObject, IMyEntityObjectSubClass 

繰り返しますが、どんな考えでも素晴らしいでしょう

4

4 に答える 4

0

私もこれと同じ問題を抱えています(VBで)。私が見つけたのは、ジェネリック パラメーターを使用できるということですが、型 MyEntityObjectSubClass が別のアセンブリにあるため、エラーになります。ジェネリック パラメーターの型制限を削除すると、問題なく動作します。

これはフレームワーク自体のエラーだと思います。Microsoftにフィードバック チケットを送信しました。VB.netを添付しました

于 2011-05-17T19:03:02.760 に答える
0

私は一般的なコードを削除してしまい、うまくいきました。

于 2009-02-12T18:08:45.930 に答える
0

コンパイル時に参照を必要とするコードがない場合、その参照はビルドされたアセンブリに含まれません。Reflectorなどのツールを使用して、参照がアセンブリに組み込まれているかどうかを確認できます。

XmlSerializer を作成する静的メソッドを WantToSerialize に追加することもできます。WantToSerialize を含むアセンブリは、EntityObject への適切な参照を既に持っている必要があるため、これで問題が解決するはずです。

于 2009-02-12T06:52:35.600 に答える