私が 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
繰り返しますが、どんな考えでも素晴らしいでしょう