Если вы используете встроенную обработку, то XmlSerializer
действительно хочет использовать конструктор по умолчанию. Вы можете сделать это через:
public class Group {
public Group() {}
[XmlAttribute("id")]
public int Id {get;set;}
[XmlAttribute("name")]
public string Name {get;set;}
[XmlAttribute("parentid")]
public int ParentId {get;set;}
}
но обратите внимание, что существует большая разница между Group
родительским и родительским идентификатором. Я подозреваю, что лучшим подходом было бы или записать данные в более иерархической форме, или , чтобы придерживаться того, что у вас есть, но использовать простой DTO во время десериализации. Затем переведите эти данные в то, что вы на самом деле хотите на следующем этапе. Итак, если у вас есть:
List<GroupDTo> groups = ...
Вы можете перевести это как:
var actualGroups = from group in groups
select new Group(group.Id, group.Name,
groups.FirstOrDefault(x => x.Id == group.ParentId));
это должно делать то, что вам нужно.