Ich habe 2 Klassen, die von einer generischen Basisklasse abgeleitet sind.
Serialisierung von benutzerdefinierten Objekten
[Serializable()]
[XmlInclude(typeof(User))]
[XmlInclude(typeof(File))]
public class BaseEntity<T>
{
private long id;
[XmlAttribute(AttributeName = "id")]
public virtual long ID
{
get { return this.id; }
set { this.id = value; }
}
}
[Serializable()]
public class User : BaseEntity<User>
{
private string userName;
private string sharedDirectory;
private bool connected;
[XmlAttribute(AttributeName = "UserName")]
public virtual string UserName
{
get { return this.userName; }
set { this.userName = value; }
}
[XmlAttribute(AttributeName = "SharedDirectory")]
public virtual string SharedDirectory
{
get { return this.sharedDirectory; }
set { this.sharedDirectory = value; }
}
[XmlAttribute(AttributeName = "IsConnected")]
public virtual bool IsConnected
{
get { return this.connected; }
set { this.connected = value; }
}
}
[Serializable()]
public class File : BaseEntity<File>
{
private string name;
private User user;
[XmlAttribute(AttributeName = "Name")]
public virtual string Name
{
get { return this.name; }
set { this.name = value; }
}
[XmlElement(ElementName = "User", Type = typeof(User))]
public virtual User User
{
get { return this.user; }
set { this.user = value; }
}
}
Ich habe einen Web-Service (nicht WCF-Dienst), die eine Liste von Dateien (List) zurückzukehren. Wenn ich den Service aufruft, wird die Methode ausgeführt, aber der Serialisierungsprozess schlägt fehl. Dies ist die Ausnahme, die ich bekomme:
System.Web.Services.Protocols.SoapException: Server konnte Anfrage nicht verarbeiten. ---> System.InvalidOperationException: Beim Erstellen des XML-Dokuments ist ein Fehler aufgetreten. ---> System.InvalidOperationException: Der Typ Castle.Proxies.UserProxy wurde nicht erwartet. Verwenden Sie das XmlInclude- oder SoapInclude-Attribut, um Typen anzugeben, die nicht statisch bekannt sind. \ N at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write4_User (Zeichenfolge n, Zeichenfolge ns, Benutzer o, Boolean IsNullable, Boolean needType) \ n bei Microsoft. Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write6_File (Zeichenfolge n, Zeichenfolge ns, Datei o, Boolean isNullable, Boolean needType) \ n bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write7_GetFilesByNameResponse (Object [] p) \ n bei Microsoft. Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Serialize (Object objectToSerialize, XmlSerializationWriter-Schreiber) \ n bei System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter, Object o, XmlSerializerNamespaces-Namespaces, String encodingStyle, String-ID) \ n --- End der internen Ausnahmestapelaufzeichnung --- \ n bei System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter, Object o, XmlSerializerNamespaces-Namespaces, String encodingStyle , String-ID) \ n unter System.Web.Services.Protocols.SoapServerProtocol.WriteReturns (Object [] returnValues, Stream outputStream) \ n unter System.Web.Services.Protocols.WebServiceHandler.WriteReturns (Object [] returnValues) \ n at System.Web.Services.Protocols.WebServiceHandler.Invoke() \ n --- Ende des inneren Ausnahme-Stack-Trace ---
Jeder weiß warum?