2014-09-12 1 views
3

J'ai un projet asp.net web api et j'ai un problème avec User Model qui a la chaîne [] Roles comme propriété qui n'est pas sérialisée comme je le veux.Gestion des matrices en sérialisation avec DataContractSerializer

Modèle utilisateur:

[DataContract(Namespace = "")] 
public class User 
{ 
    [DataMember(Order = 0)] 
    public string UserName { get; set; } //ro 

    [DataMember(Order = 1)] 
    public int CustomerID { get; set; } //ro 

    [DataMember(Order = 2)] 
    public string Email { get; set; } 

    [DataMember(Order = 3)] 
    public string Phone { get; set; } 

    [DataMember(Order = 4)] 
    public string Mobile { get; set; } 

    [DataMember(Order = 5)] 
    public string FullName { get; set; } 

    [DataMember(Order = 6)] 
    public List<string> Roles { get; set; } 

    [DataMember(Order = 7)] 
    public string Culture { get; set; } 

    [DataMember(Order = 8)] 
    public string Language { get; set; } 

    [DataMember(Order = 9)] 
    public string TimeZone { get; set; } 

    [DataMember(Order = 10)] 
    public DateTime Created { get; set; } //ro 

} 

et quand je reçois le résultat de la demande est quelque chose comme de la manière suivante: -

<User xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <UserName>User1</UserName> 
    <CustomerID>1234</CustomerID> 
    <Email>[email protected]</Email> 
    <Phone/> 
    <Mobile/> 
    <FullName>XYZ</FullName> 
    <Roles xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
    <d2p1:string>AdminRole</d2p1:string> 
    <d2p1:string>AlertsRole</d2p1:string> 
    </Roles> 
    <Culture>en-IN</Culture> 
    <Language>en</Language> 
    <Created>2014-04-21T11:26:22</Created> 
</User> 

mais je veux le code XML comme suit: -

<User xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <UserName>User1</UserName> 
    <CustomerID>1234</CustomerID> 
    <Email>[email protected]</Email> 
    <Phone/> 
    <Mobile/> 
    <FullName>XYZ</FullName> 
    <Roles> 
    <string>Role1</string> 
    <string>Role2</string> 
    </Roles> 
    <Culture>en-IN</Culture> 
    <Language>en</Language> 
    <Created>2014-04-21T11:26:22</Created> 
</User> 

Veuillez suggérer n'importe quelle solution que je peux implémenter.

Merci à l'avance

+0

Créer une classe personnalisée 'RolesList' qui hérite' Liste 'et mettre en œuvre la sérialisation XML vous . – Styxxy

+0

Avez-vous besoin de définir l'espace de noms sur la classe User? –

Répondre

2

Vous pouvez le faire en créant un type de collection avec le même espace de noms:

[CollectionDataContract(Namespace = "")] 
public class StringList : List<string> 
{ 
    public StringList() { } 

    public StringList(IEnumerable<string> items) : base(items) { } 
} 

[DataContract(Namespace = "")] 
public class User 
{ 
    [DataMember(Order = 0)] 
    public string UserName { get; set; } //ro 

    [DataMember(Order = 1)] 
    public int CustomerID { get; set; } //ro 

    [DataMember(Order = 2)] 
    public string Email { get; set; } 

    [DataMember(Order = 3)] 
    public string Phone { get; set; } 

    [DataMember(Order = 4)] 
    public string Mobile { get; set; } 

    [DataMember(Order = 5)] 
    public string FullName { get; set; } 

    [DataMember(Order = 6)] 
    public StringList Roles { get; set; } 

    [DataMember(Order = 7)] 
    public string Culture { get; set; } 

    [DataMember(Order = 8)] 
    public string Language { get; set; } 

    [DataMember(Order = 9)] 
    public string TimeZone { get; set; } 

    [DataMember(Order = 10)] 
    public DateTime Created { get; set; } //ro 
} 
+0

Je veux aussi gérer le scénario Post ... Mais mon objet Roles est toujours nul. J'ai essayé StringList: Liste et aussi Liste . Dans le corps de la demande, Rôle1. Mais toujours mon objet Rôles n'est pas rempli. Quelqu'un pourrait-il m'aider, s'il vous plaît? –

+1

Si vous héritez d'un type générique (par exemple 'Collection '), vous devez également utiliser l'attribut ['KnownType'] (http://stackoverflow.com/a/4875229/393280). – palswim

Questions connexes