C # WCF contratto dati classe parziale - nuovo campo in 2a classe parziale non essere raccolto

StackOverflow https://stackoverflow.com/questions/4386677

Domanda

Ho un servizio WCF in cui ho alcuni contratti dati. Sto utilizzando il servizio web software factory, che utilizza un designer per creare tutti i messaggi e dei dati e altri contratti, e li crea come classi parziali. Quando il codice viene rigenerato le classi sono ricreati.

using WcfSerialization = global::System.Runtime.Serialization;

[WcfSerialization::CollectionDataContract(Namespace = "urn:CAEService.DataContracts", ItemName = "SecurityItemCollection")]
public partial class SecurityItemCollection : System.Collections.Generic.List<SecurityItem>
{
}

Il contratto dei dati è un generico elenco di una classe personalizzata che è stato funzionando benissimo. Comunque ora voglio aggiungere una proprietà a questa classe, così ho aggiunto questa classe parziale nello stesso namespace:

public partial class SecurityItemCollection
{
    public int TotalRecords { get; set; }
}

Questo sembra funzionare bene sul lato di servizio, ma quando compilo e quindi aggiornare il riferimento al servizio da parte del cliente, la classe non avere il nuovo cioè proprietà quando serialises e ricrea sul lato client, è manca la nuova proprietà. Qualcuno sa perché questo è?

TIA

EDIT: Ok questo è ufficialmente alla guida mi noci. L'unica cosa che posso vedere è che si sta usando l'attributo CollectionDataContract invece di DataContract. Questo in qualche modo non consentire ai membri di dati nella classe da serializzare? Perché sarebbe? Si sta lavorando bene sul lato di servizio - posso vedere e popolare i valori non è un problema. Tuttavia quando aggiorno il riferimento e servizio sul mio cliente non c'è niente, solo la classe colelction senza il membro di dati.

È stato utile?

Soluzione 2

Ok dopo molte ricerche ho finalmente scoperto che questo non è consentito classi ovvero contrassegnate come CollectionDataContract non può avere membri di dati. Perchè questo è ho idea, ma mi è costato diverse ore e una delle grandi preoccupazioni. Vedi link sotto:

WCF CollectionDataContract e DataMember

Altri suggerimenti

Prova per aggiungere l'attributo DataMember alla proprietà TotalRecords

So che questo è vecchio ma continuava a venire quando ho cercato su questo argomento. Sono stato in grado di ottenere questo lavoro con l'aggiunta di un attributo "DataMemberAttribute" per la proprietà. Di seguito è riportato un esempio di codice.

public partial class SecurityItemCollection
{
    [global::System.Runtime.Serialization.DataMemberAttribute()]
    public int TotalRecords { get; set; }

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top