2013-05-26 20 views
9

sto ottenendo il seguente errore sulla classe di seguito:XmlAttribute/XmlText non può essere usato per codificare i tipi complessi

Non può serializzare membro 'ingrediente' di tipo DataObjects.Ingredient. XmlAttribute/XmlText non può essere utilizzato per codificare tipi complessi.

Qualche idea sul perché?

[DataContract] 
[Serializable] 
[XmlRoot("ingredient")] 
public class Ingredient 
{ 
    private string id; 
    private string name; 
    private string description; 

    private IngredientNutrient[] nutrients; 

    public Ingredient(string id, string name, string description, IngredientNutrient[] nutrients) 
    { 
     this.id = id; 
     this.name = name; 
     this.description = description; 
     this.nutrients = nutrients; 
    } 

    public Ingredient(string id, string name, string description) 
    { 
     this.id = id; 
     this.name = name; 
     this.description = description; 
    } 

    public Ingredient() 
    { 

    } 

    [DataMember] 
    [XmlAttribute("id")] 
    public string ID 
    { 
     get { return this.id; } 
     set { this.id = value; } 
    } 

    [DataMember] 
    [XmlAttribute("name")] 
    public string Name 
    { 
     get { return this.name; } 
     set { this.name = value; } 
    } 

    [DataMember] 
    [XmlAttribute("description")] 
    public string Description 
    { 
     get { return this.description; } 
     set { this.description = value; } 
    } 

    [DataMember] 
    [XmlArray("nutrients")] 
    [XmlArrayItem("ingredientnutrient")] 
    public IngredientNutrient[] Nutrients 
    { 
     get { return this.nutrients; } 
     set { this.nutrients = value; } 
    } 

} 

risposta

27

Probabilmente si dovrà usare [XmlElement] invece di [XmlAttribute]. Un attributo non può essere un tipo complesso.

1

Un altro suggerimento: lasciare il prefisso per le proprietà (elenco) sotto l'elemento radice.