Pregunta

Tengo estructura XML siguiente:

<Group id="2" name="Third" parentid="0" />
<Group id="6" name="Five" parentid="4" />   
<Group id="3" name="Four" parentid="2" />
<Group id="4" name="Six" parentid="1" />

denota padre es el ID del grupo.

El Constructor del Grupo se lee como:

public Group(string name, int ID, Group parent)

Mientras que De-serializar, ¿cómo consigo el uso de los padres Id y pasan al grupo?

¿Fue útil?

Solución

Si está utilizando el procesamiento incorporado, a continuación, XmlSerializer en realidad sólo quiere usar el constructor por defecto. Se podría hacer eso a través de:

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;}
}

Pero tenga en cuenta que hay una gran diferencia entre un padre y un padre Group-id. Sospecho que el mejor enfoque sería la de o bien escribir los datos de una manera más jerárquica, o para seguir con lo que tiene, pero utilizar un DTO sencilla durante la deserialización. Luego traducir estos datos en lo que realmente desea en la siguiente etapa. Por lo tanto, si usted tiene:

List<GroupDTo> groups = ...

Se podría traducir como que:

var actualGroups = from group in groups
                   select new Group(group.Id, group.Name,
                      groups.FirstOrDefault(x => x.Id == group.ParentId));

Esto debería hacer lo que necesita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top