Per lo scenario di lista, forse solo avere una proprietà diversa, così invece di:
[DataMember]
public List<Whatever> Items {get {...}}
si hanno:
public List<Whatever> Items {get {...}}
[DataMember]
public List<Whatever> SelectedItems {
get { return Items.FindAll(x => x.IsSelected); }
tuttavia, deserializzazione che sarebbe un dolore, come la tua lista avrebbe bisogno di nutrire in Articoli; se è necessario deserializzare, potrebbe essere necessario scrivere un elenco personalizzato complesso.
Come seconda idea; crea semplicemente una seconda istanza dell'oggetto con solo gli elementi che desideri serializzare; molto semplice ed efficace:
var dto = new YourType { X = orig.X, Y = orig.Y, ... };
foreach(var item in orig.Items) {
if(orig.Items.IsSelected) dto.Items.Add(item);
}
// now serialize `dto`
per quanto ne so, DataContractSerializer
non supporta la serializzazione condizionale di membri.
Al livello proprietà individuale, questo è un'opzione se si utilizza XmlSerializer
, anche se - per una proprietà, ad esempio, Foo
, si aggiunge solo:
public bool ShouldSerializeFoo() {
// return true to serialize, false to ignore
}
o:
[XmlIgnore]
public bool FooSpecified {
get { /* return true to serialize, false to ignore */ }
set { /* is passed true if found in the content */ }
}
Questi sono applicati esclusivamente come una convenzione basata sul nome.
Grazie, Marc. Ad esempio, se ho un'istanza di Lista in cui MyClass ha tre proprietà X, Y e Z, sarebbe possibile includere solo le proprietà X e Y e ignorare Z per ogni elemento nell'elenco e quindi inviare questo elenco a DataContractSerializer e il serializzatore includerà solo X e Y nell'output e ignorerà Z? Voglio solo escludere alcune proprietà per ogni elemento nell'elenco. È possibile con alcune delle opzioni che hai specificato sopra? –
Joxi
Nel caso di voler serializzare 'X' e' Y' ma non 'Z'; con DCS che è disponibile solo (per quanto ne so) se si applica a ** tutti ** gli elementi, ovvero scegliendo '[DataMember]' o '[IgnoreDataMember]' appropriatamente; DCS non ha serializzazione condizionale per quanto ne so. –