Я хочу сопоставить элементы XML в моей таблице базы данных (используя Entity Framework):
var xmlSerializer = new XmlSerializer(typeof(Participant), new XmlRootAttribute("participant"));
var participant = (Participant)xmlSerializer.Deserialize(new StringReader(content));
У меня есть таблица участников, к которой я могу получить доступ,
[XmlRoot("participant", Namespace = "")]
public partial class Participant
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Participant()
{
this.GroupParticipant = new HashSet<GroupParticipant>();
this.ParticipantAddress = new HashSet<ParticipantAddress>();
this.ParticipantPublisher = new HashSet<ParticipantPublisher>();
this.ParticipantJob = new HashSet<ParticipantJob>();
this.ParticipantProvider = new HashSet<ParticipantProvider>();
}
[XmlElement("firstName")]
public string FirstName { get; set; }
[XmlElement("lastName")]
public string LastName { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
//[XmlElement("address")]
//[XmlElement("address")]
//[XmlArray("HashSet<ParticipantAddress>"), XmlElement("address")]
//[XmlArrayItem("ICollection<ParticipantAddress>")]
//[XmlAttribute(DataType = "ICollection<ParticipantAddress>", AttributeName = "address")]
[XmlElement("address", typeof(List<ParticipantAddress>))]
public virtual ICollection<ParticipantAddress> ParticipantAddress { get; set; }
}
ParticipantAddress - ICollection:
[Serializable]
[XmlInclude(typeof(HashSet<ParticipantAddress>))]
public partial class ParticipantAddress
{
public int ParticipantAddressId { get; set; }
public int ParticipantId { get; set; }
[XmlElement("city")]
public string City { get; set; }
[XmlElement("state")]
public string State { get; set; }
[XmlElement("zipCode")]
public string ZipCode { get; set; }
public virtual Participant Participant { get; set; }
}
Исключение говорит:
{"Произошла ошибка при отображении типа 'x.Participant'."}
Мое внутреннее исключение говорит:
{"Невозможно сериализовать член 'xParticipant.ParticipantAddress' типа 'System.Collections.Generic.ICollection`1 [[x.ParticipantAddress, APS.Data.BatchInterface, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null]]' , подробнее см. внутреннее исключение. "}
Я читаю XML с помощью streamReader.
я пытался
- [XMLArray]
- Изменение ICollection на список
- сделать класс сериализуемым
Есть ли другой способ решить эту проблему или какие-либо примеры, связанные с моим вопросом или любыми изменениями, которые мне нужно реализовать в моем коде?