KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I will simplify the code to save space but what is presented does illustrate the core problem. I have a class which has a property that is a base type. There are 3 derived classes which could be assigned to that property. If I assign any of the derived classes to the container and attempt to serialize the container, the XmlSerializer throws the dreaded: "The type x was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically." However my base class is already decorated with that attribute so I figure there must be an additional "hidden" requirement. The really odd part is that the default WCF serializer has no issues with this class hierarchy. The Container class [DataContract] [XmlRoot(ElementName = "TRANSACTION", Namespace = Constants.Namespace)] public class PaymentSummaryRequest : CommandRequest { [DataMember] public PaymentSummary Summary { get; set; } public PaymentSummaryRequest() { Mechanism = CommandMechanism.PaymentSummary; } } The base class [DataContract] [XmlInclude(typeof(xPaymentSummary))] [XmlInclude(typeof(yPaymentSummary))] [XmlInclude(typeof(zPaymentSummary))] [KnownType(typeof(xPaymentSummary))] [KnownType(typeof(yPaymentSummary))] [KnownType(typeof(zPaymentSummary))] public abstract class PaymentSummary { } One of the derived classes [DataContract] public class xPaymentSummary : PaymentSummary { } The serialization code var serializer = new XmlSerializer(typeof(PaymentSummaryRequest)); serializer.Serialize(Console.Out,new PaymentSummaryRequest{Summary = new xPaymentSummary{}}); The Exception System.InvalidOperationException: There was an err
Tags (comma-separated)
Save Edits
Cancel