2009-10-21 8 views
1

Comment obtenir les attributs de l'élément interne plutôt que de l'élément racine?Comment obtenir xml dans un format requis lors de la sérialisation d'un objet en utilisant la sérialisation XML dans .Net

[XmlRoot("Root")] 
public class Test 
{ 
    string type=null; 
    int value=0; 
    public string Type 
    { 
     get { return type; } 
     set { type=value; } 
    } 
    [XmlAttribute] 
    public int Value 
    { 
     get { return type; } 
     set { type=value; } 
    } 
} 

se traduira dans

<Root Value=""> 
    <Type> 
    </Type> 
</Root> 

Cependant, je veux

<Root > 
    <Type Value=""> 
    </Type> 
</Root> 

S'il vous plaît, aidez-moi. Merci d'avance.

Répondre

0
[XmlRoot("Root")] 
public class Test 
{ 
    TypeClass type=null; 
    [XmlElement("Type")] 
    public TypeClass Type 
    { 
     get{return type;} 
     set{type=value;} 
    } 
} 
[XmlRoot("Type")] 
public class TypeClass 
{ 
    int _value=0; 
    [XMlAttribute] 
    public int Value 
    { 
     get{return _value;} 
     set{_value=value;} 
    } 
} 

essayer cette

+0

espace, s'il vous plaît! – Danny

1

XmlSerializer est pas super personnalisable. Le plus proche que vous pouvez obtenir à la réalisation de cet (sans avoir recours à la sérialisation personnalisée) est une classe wrapper:

[XmlRoot("Root")] 
public class Test 
{ 
    public TypeData Type { get; set; } 

    // ... 
} 

class TypeData 
{ 
    public string Data { get; set; } 

    [XmlAttribute] 
    public int Value { get; set; } 
} 

Dans ce cas, vous vous retrouverez avec:

<Root> 
    <Type Value=""> 
    <Data>...</Data> 
    </Type> 
</Root> 
2

XmlSerializer est destiné à être une carte naturelle entre le modèle d'objet et le xml; la réponse est donc de structurer votre DTO de la même façon que votre xml. Dans ce cas, en enveloppant Test dans un second objet:

public class Root { 
    public Test Type {get;set;} 
} 

L'alternative met en œuvre IXmlSerializable, mais qui est l'effort, et facile de se tromper. Il n'est pas rare d'exiger une représentation d'objet distincte à des fins de sérialisation - il ne faut pas supposer que vos objets d'affaires/de données «normaux» sont nécessairement directement appropriés à la sérialisation.

+0

+1 pour "structurer votre DTO pour s'adapter à votre xml" –

Questions connexes