Para el escenario de la lista, tal vez simplemente una propiedad diferente, así que en vez de:
[DataMember]
public List<Whatever> Items {get {...}}
que tienen: sin embargo
public List<Whatever> Items {get {...}}
[DataMember]
public List<Whatever> SelectedItems {
get { return Items.FindAll(x => x.IsSelected); }
, deserializar que sería un dolor, ya que su lista necesitaría alimentar en artículos; si necesita deserializar también, es posible que deba escribir una lista personalizada compleja.
Como segunda idea; simplemente cree una segunda instancia del objeto con solo los artículos que desea serializar; muy simple y eficaz:
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`
yo sepa, DataContractSerializer
no admite la serialización condicional de los miembros.
Al nivel propiedad individual, este es una opción si está utilizando XmlSerializer
, sin embargo - para una propiedad, por ejemplo, Foo
, que acaba de añadir:
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 */ }
}
Se aplican únicamente como una convención basada en el nombre.
Gracias, Marc. Entonces, por ejemplo, si tengo una instancia de List donde MyClass tiene tres propiedades X, Y y Z, sería posible incluir solo las propiedades X e Y e ignorar Z para cada elemento en la lista y luego enviar esta lista a DataContractSerializer y el serializador incluirá solo X e Y en la salida e ignorará Z? Solo quiero excluir algunas propiedades para cada elemento en la lista. ¿Es posible con algunas de las opciones que has especificado arriba? –
Joxi
En el caso de querer serializar 'X' y' Y' pero no 'Z'; con DCS que solo está disponible (hasta donde yo sé) si se aplica a ** todos ** los elementos, es decir, eligiendo '[DataMember]' o '[IgnoreDataMember]' apropiadamente; DCS no tiene serialización condicional según mi leal saber y entender. –