C# 使用继承反序列化XML

C# 使用继承反序列化XML,c#,xml,class,deserialization,C#,Xml,Class,Deserialization,我需要反序列化以下XML: <ContactMethods> <ContactMethod Method="PhoneContact"> (00) 000 0000 </ContactMethod> <ContactMethod Method="WorkContact"> (00) 000 0000 </ContactMethod> </ContactMethods> 目前,我有一个名为ContactMe

我需要反序列化以下XML:

<ContactMethods>
    <ContactMethod Method="PhoneContact"> (00) 000 0000 </ContactMethod>
    <ContactMethod Method="WorkContact">  (00) 000 0000 </ContactMethod>
</ContactMethods>
目前,我有一个名为ContactMethod的基类,它的字段由所有contact方法共享。我还为每种类型的联系人提供了类,每个类都继承了ContactMethod基类。我已经在下面提供了我的课程,其中有

public class Applicant
{
  [System.Xml.Serialization.XmlArray]
    [System.Xml.Serialization.XmlArrayItem(ElementName="Dependant")]
  public List<string> Dependants;

  //CONTACT
  [System.Xml.Serialization.XmlArrayItem("PhoneContact", typeof(PhoneContact))]
  public List<ContactMethod> ContactMethods;
}

public class ContactMethod
{
  public string ContactMethodId { get; set; }
  public string Value;
  public Boolean PhoneFacsimile;
  public Boolean PhoneSms;
  public Boolean PhoneVoice { get; set; }
  public Boolean EmailHtml;

  public ContactMethod()
  {
    this.PhoneFacsimile = false;
    this.PhoneSms       = false;
    this.PhoneVoice     = false;
    this.EmailHtml      = false;
  }
}

public class PhoneContact : ContactMethod
{
  public PhoneContact()
  {
    this.ContactMethodId  = "PH";
    this.PhoneVoice       = true;
  }
}

public class WorkContact : ContactMethod
{
  public WorkContact()
  {
    this.ContactMethodId  = "W";
    this.PhoneVoice       = true;
  }
}

我的目标是使用每个联系人方法类型的构造函数来设置默认值,如联系人方法id。那么,如何使用method=,将每个contact方法映射到相应的contactMethod类型类呢?在XML字符串中。

为什么对于各种类型的联系人方法有几个布尔值?联系人真的可以同时是电子邮件、电话和短信吗?为什么需要子类,为什么不使用enum ContactMethod{Phone,Work,Sms,}的单一联系人类型还有两个字段:联系人数据的字符串和方法?@Anders Forsgren我正在使用另一个系统,该系统要求在创建客户端时传入这些值。快速而肮脏的解决方案:对方法的值使用switch语句,并从中调用相应的构造函数。非常不稳定,但很简单。@CodeMonkey从问题中可以看出,您似乎是在将xml接收到您的系统中,而不是将其发送到另一个系统。“你们两个都做了吗?”安德斯·福斯格伦(Anders Forsgren),如果我不清楚的话,我向你们道歉。我使用的系统允许您开发自定义脚本来实现自己的功能。我正在编写一个脚本,它接受XML字符串,并通过这个others systems业务层向数据库添加记录。