Изменение:
[XmlArrayItem(typeof(Order))]
public List<Order> Orders { get; set; }
до:
[XmlElement("order")]
public List<Order> Orders { get; set; }
хорошо ... строго говоря, я бы склонен (мне не нравятся настраиваемые списки) использовать:
private List<Order> orders;
[XmlElement("order")]
public List<Order> Orders {get{ return orders ?? (orders = new List<Order>());}}
Вам также нужен другой корневой объект:
[XmlRoot("msg")]
public class Message
{
[XmlElement("reply")]
public MessageReply Reply { get; set; }
}
Тогда это работает:
var ser = new XmlSerializer(typeof(Message));
MessageReply reply;
using(var reader = new StringReader(xml))
{
reply = ((Message)ser.Deserialize(reader)).Reply;
}