2010-08-05 3 views
2

J'ai une classe LINQ to SQL (dbml) représentant certaines tables dans une base de données. J'ai ajouté un "champ calculé" en étendant la classe partielle d'une des tables (Dwelling) avec une nouvelle propriété (DwellingCode); cette propriété prend les valeurs de plusieurs champs de base de données dans la table Dwelling et génère une chaîne.Obtention de la propriété de classe LINQ étendue à sérialiser

Jusqu'ici, tout fonctionne bien; Je peux obtenir ce champ calculé pour afficher correctement dans les contrôles liés dans les pages Web etc. Le problème est que j'ai également un service Web SOAP qui renvoie un objet d'habitation. Lorsque l'objet Dwelling est sérialisé en XML, le DwellingCode n'est pas inclus avec le reste des champs "réels" de la base de données.

Que dois-je faire pour que la propriété DwellingCode soit sérialisée avec le reste des champs de base de données? Basé sur un peu de googling, j'ai essayé d'ajouter [DataMember] et [DataMamberAttribute] à la propriété DwellingCode et [DataContract] et [Serializable] à la classe partielle, mais rien ne semble fonctionner.

public partial class Dwelling 
{ 

    public string DwellingCode 
    { 

     get 
     { 
      // code to concatenate fields here 
     } 

    } 

} 
+0

Odd ... J'ai mis un point d'arrêt sur le getter et il s'exécute quand le service web est appelé. Donc, il récupère le DwellingCode, mais ne l'écrit pas en XML. –

Répondre

-1

Votre propriété est en lecture seule, ce qui explique pourquoi il n'est pas sérialisé. La sérialisation intégrée standard ne sérialise que les propriétés de lecture-écriture (comme vous avez pu le constater).

0

Ok, ajoutant ceci à la propriété DwellingCode travaillé:

[global::System.Runtime.Serialization.DataMemberAttribute(Name = "DwellingCode")] 

Pour une raison quelconque, ceux-ci ne fonctionnent pas. Je ne suis pas sûr que la suppression du chemin de l'espace de nom complet ne fonctionne pas lorsque je l'utilise, et la documentation que j'ai lue indique que le nom sera le même que le nom de la propriété si le paramètre name n'est pas spécifié , donc je ne sais pas pourquoi c'est si difficile.

using System.Runtime.Serialization; 
... 
[DataMemberAttribute(Name = "DwellingCode")] 
[DataMemberAttribute()] 

Edit:

J'ai aussi besoin d'ajouter un setter vide, ou bien la propriété ne serait pas visible. Peu importe.

[global::System.Runtime.Serialization.DataMemberAttribute(Name = "DwellingCode")] 
public string DwellingCode 
{ 

    set 
    { 

    } 

    get 
    { 
     // code goes here 
    } 

} 

}

+0

Avez-vous essayé '[global :: System.Runtime.Serialization.DataMemberAttribute]'? –

Questions connexes