У меня возникает проблема со следующим фрагментом кода, в котором, когда я прихожу к указанию, что такое Предмет (например, CashInHand), фактический тип CashInHandPayment недоступен, поскольку он не был перенесен, когда я создать прокси-класс (скорее всего потому, что он не читается в XmlElementAttributes).
Есть ли способ принудительно сериализировать классы, такие как AccountPayment, CashInHandPayment и CCPayment в прокси-классе?
[DataContract]
public class Payment
{
[XmlElementAttribute("Account", typeof(AccountPayment))]
[XmlElementAttribute("CashInHand", typeof(CashInHandPayment))]
[XmlElementAttribute("CreditCard", typeof(CCPayment))]
[XmlChoiceIdentifierAttribute("ItemElementName")]
[DataMember]
public object Item { get; set; }
}
[DataContract]
public enum ItemElementName
{
[EnumMember]
Account,
[EnumMember]
CashInHand,
[EnumMember]
CreditCard
}
//This class will not be in the generated proxy class
[DataContract]
public class AccountPayment
{
[DataMember]
public double Amount { get; set; }
}
//classes for CashInHandPayment and CCPayment also created, but not shown.
Простите, если термин «сериализация» не является правильным термином, если вы прочитали вопрос и обнаружили, что это не так, измените его соответствующим образом!
Обновление - ответ, упомянутый Саймоном Свенссоном:
[KnownType(typeof(AccountPayment))]
[KnownType(typeof(CashInHandPayment))]
[KnownType(typeof(CCPayment))]
[DataContract]
public class Payment
{
[XmlElementAttribute("Account", typeof(AccountPayment))]
[XmlElementAttribute("CashInHand", typeof(CashInHandPayment))]
[XmlElementAttribute("CreditCard", typeof(CCPayment))]
[XmlChoiceIdentifierAttribute("ItemElementName")]
[DataMember]
public object Item { get; set; }
}
Большое спасибо, Саймон!