Ich hoffe, dass jemand mir bei diesem Problem helfen kann, das ich mit XmlSerializer habe.
Ich habe diesen Thread bereits durchgelesen: http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/551cee76-fd80-48f8-ac6b-5c22c234fecf/
Der Fehler, den ich erhalte, lautet:
System.InvalidOperationException: Es konnte keine temporäre Klasse erzeugt werden (result=1). Fehler CS0012: Der Typ 'System.Data.Objects.DataClasses.EntityObject' ist in einer Assembly definiert, die nicht referenziert ist. Sie müssen einen Verweis auf die Assembly 'System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' hinzufügen.
Ich habe sichergestellt, dass mein Unit-Test einen Verweis auf System.Data.Entity hat, so dass es in der Lage, zumindest zu kompilieren ist. Ich habe auch in der app.config eine Assembly-Bindung an System.Data.Entity vorgenommen.
Hier ist meine grobe Klassenstruktur
[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
}
Die WantToSerializeBaseClass nutzt einige Generika, aber ich habe sie mit XmlIncludes für (EntityObject und alle anderen Klassen, auf die sie verweist, sowie) dekoriert.
den aufrufenden Code:
var serializerWrite = new XmlSerializer(typeof (WantToSerialize), XmlSupport.ITNNamespace);
scheitert
Aber wenn ich es tue:
var serializerWrite = new XmlSerializer(typeof (WantToSerialize), new Type[] {typeof(EntityObject)});
es ist erfolgreich.
Jeder Gedanke wäre sehr hilfreich.
AKTUALISIERT Ich habe das Problem auf eine Methode in der WantToSerializeBaseClass zurückgeführt
public abstract void ConvertFromEntity<TtoCopy>(TtoCopy toCopy) where TtoCopy : MyEntityObjectSubClass;
MyEntityObjectSubClass ist eine Unterklasse von EntityObject, die einige Methoden hinzufügt, die ich für meine Entitätsobjekte benötige. Die MyEntityObjectSubClass sieht wie folgt aus:
[Serializable]
[XmlInclude(typeof(EntityObject))]
public abstract class MyEntityObjectSubClass : EntityObject, IMyEntityObjectSubClass
Auch hier wäre jeder Gedanke großartig