With the following EF Core entity class, I am unable to populate Orders by utilizing XmlSerializer.Deserialize()
OrderIds does serialize correctly, but the setter never gets called. I'm doing this to avoid a circular reference in the XML.
[Serializable]
public class Customer
{
public Customer()
{
this.Orders = new HashSet<Order>();
}
[XmlIgnore]
public virtual ICollection<Order> Orders { get; }
[NotMapped]
[XmlArray("OrderIds")]
[XmlArrayItem("OrderId")]
public List<string> OrderIds
{
get => this.Orders
.Select(o => o.OrderId).ToList();
set // Never Called
{
this.Orders.Clear();
foreach (var id in value)
{
var order = new Order()
{
OrderId = id,
};
this.Orders.Add(order);
}
}
}
}
Here's an XML Sample, generated with XmlSerializer.Serialize()
:
<Report>
<Customer>
<Name>John Smith</Name>
<Age>33</Age>
<OrderIds>
<OrderId>A</OrderId>
<OrderId>B</OrderId>
</OrderIds>
</Customer>
<Customer>
<Name>Jane Doe</Name>
<Age>33</Age>
<OrderIds>
<OrderId>C</OrderId>
<OrderId>D</OrderId>
</OrderIds>
</Customer>
</Report>