Υπάρχει λόγος για τον οποίο μια βασική κλάση διακοσμημένη με XmlInclude θα εξακολουθούσε να δημιουργεί μια άγνωστη εξαίρεση τύπου όταν γίνεται σειριακή;

Υπάρχει λόγος για τον οποίο μια βασική κλάση διακοσμημένη με XmlInclude θα εξακολουθούσε να δημιουργεί μια άγνωστη εξαίρεση τύπου όταν γίνεται σειριακή;

Το πρόβλημα που βλέπετε οφείλεται στο PaymentSummaryRequest ρυθμίζει τον χώρο ονομάτων. Μπορείτε είτε να αφαιρέσετε τον χώρο ονομάτων είτε να προσθέσετε έναν χώρο ονομάτων στο PaymentSummary τάξη:

[XmlRoot(Namespace = Constants.Namespace)]
[XmlInclude(typeof(xxxPaymentSummary))]
public abstract class PaymentSummary
{
}

Όπως αναφέρει ο @Tedford στο σχόλιό του παρακάτω, ο χώρος ονομάτων απαιτείται μόνο όταν χρησιμοποιούνται παράγωγοι τύποι.

Φαίνεται ότι κατά τη δημιουργία της διάταξης σειριοποίησης XML, δεδομένου ότι ο ριζικός κόμβος έχει ένα σύνολο ονομάτων και η βασική κλάση δεν έχει, δεν περιλαμβάνει τη λογική Συμπερίληψη XML στη συγκρότηση σειριοποίησης που δημιουργείται.

Μια άλλη προσέγγιση για την επίλυση του προβλήματος θα ήταν η κατάργηση των δηλώσεων χώρου ονομάτων από τις ίδιες οι κλάσεις και ο καθορισμός του χώρου ονομάτων στο XmlSerializer κατασκευαστής:

var serializer = new XmlSerializer(
    typeof(PaymentSummaryRequest), 
    Constants.Namespace
);