Laden...

WCF Vererbung: Eigenschaft in Kind-Klasse für die Serialisierung ausschließen

Erstellt von Alphawolf1988 vor 12 Jahren Letzter Beitrag vor 11 Jahren 2.138 Views
A
Alphawolf1988 Themenstarter:in
68 Beiträge seit 2008
vor 12 Jahren
WCF Vererbung: Eigenschaft in Kind-Klasse für die Serialisierung ausschließen

Hallo Zusammen!

Habe eine Frage bzgl der Vererbung von Klassen in WCF. Ich habe 2 Typen:


[DataContract]
    [KnownType(typeof(MessageDB))]
    public class Message : ICulvertEntry
    {
        // --------------------------------------------------------
        // Class Properties
        // --------------------------------------------------------


        /// <summary>
        /// Gets or sets the entry ID.
        /// </summary>
        /// <value>
        /// The entry ID.
        /// </value>
        [DataMember]
        public int EntryID
        {
            get;
            set;

        } // Property: EntryID


        /// <summary>
        /// Gets or sets the sender ID.
        /// </summary>
        /// <value>
        /// The sender ID.
        /// </value>
        [DataMember]
        public int SenderID
        {
            get;
            set;

        } // Property: SenderID


        /// <summary>
        /// Gets or sets the receiver ID.
        /// </summary>
        /// <value>
        /// The receiver ID.
        /// </value>
        [DataMember]
        public int ReceiverID
        {
            get;
            set;

        } // Property: ReceiverID


        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="Message"/> is readed.
        /// </summary>
        /// <value>
        ///   <c>true</c> if readed; otherwise, <c>false</c>.
        /// </value>
        [DataMember]
        public bool Readed
        {
            get;
            set;

        } // Property: Readed


        /// <summary>
        /// Gets or sets the subject.
        /// </summary>
        /// <value>
        /// The subject.
        /// </value>
        [DataMember]
        public String Subject
        {
            get;
            set;

        } // Property: Subject


        /// <summary>
        /// Gets or sets the body.
        /// </summary>
        /// <value>
        /// The body.
        /// </value>
        [DataMember]
        public String Body
        {
            get;
            set;

        } // Property: Body 

    } // class Message

/// <summary>
    /// The MessageDB Class
    /// </summary>
    [DataContract]
    public class MessageDB : Message
    {
        // --------------------------------------------------------
        // Class Properties
        // --------------------------------------------------------


        /// <summary>
        /// Gets or sets the owner ID.
        /// </summary>
        /// <value>
        /// The owner ID.
        /// </value>
        [DataMember]
        public int OwnerID
        {
            get;
            set;

        } // Property: OwnerID


        // --------------------------------------------------------
        // Class Functions
        // --------------------------------------------------------


        /// <summary>
        /// Initializes a new instance of the <see cref="MessageDB"/> class.
        /// </summary>
        public MessageDB()
        {
        } // Constructor


        /// <summary>
        /// Initializes a new instance of the <see cref="MessageDB"/> class.
        /// </summary>
        /// <param name="ownerID">The owner ID.</param>
        /// <param name="senderID">The sender ID.</param>
        /// <param name="receiverID">The receiver ID.</param>
        /// <param name="subject">The subject.</param>
        /// <param name="body">The body.</param>
        public MessageDB(int ownerID, int senderID, int receiverID, String subject, String body)
        {
            if (subject == null) throw new ArgumentNullException("subject");
            if (body == null) throw new ArgumentNullException("body");

            OwnerID = ownerID;
            SenderID = senderID;
            ReceiverID = receiverID;
            Subject = subject;
            Body = body;

        } // Constructor

    } // class MessageDB

Die Klasse MessageDB benutze ich um lokal auf der Festplatte zu speichern und besitzt noch einen zusätzlichen Parameter. Dann habe ich noch eine Service Funktion:


[OperationContract]
        [WebGet(UriTemplate = "/GetInboxMessages")]
        [Description("Return all inbox messages.")]
        List<Message> GetInboxMessages();

Diese Funktion gibt auch alles sauber serialisiert als JSON zurück, jedoch auch den Member "OwnerID" von MessageDB. Ist es irgendwie möglich das nur die DataMember von Message serialisiert zurückgegeben werden?

MFG Wolf

Wer zuerst kommt malt zuerst, wer danach kommt malt drüber! 😁

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo Alphawolf1988,

mit dem IgnoreDataMemberAttribute können Eigenschaften von der Serialisierung ausgeschlossen werden.

BTW: die Bezeichnung Message würde ich eher vermeiden, da diese im Kontext von WCF eine (wichtige) Bedeutung hat.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"