Для сценария списка, возможно, просто имеют разные свойства, поэтому вместо того, чтобы:
[DataMember]
public List<Whatever> Items {get {...}}
вас есть:
public List<Whatever> Items {get {...}}
[DataMember]
public List<Whatever> SelectedItems {
get { return Items.FindAll(x => x.IsSelected); }
однако десериализации, что было бы боль, так как ваш список должен будет питаться в Элементы; если вам также нужно десериализовать, вам может потребоваться написать сложный пользовательский список.
В качестве второй идеи; просто создайте второй экземпляр объекта с только элементы, которые вы хотите сериализовать; очень прост и эффективен:
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`
AFAIK, DataContractSerializer
не поддерживает условную сериализацию членов.
В индивидуальной собственности уровне, это является вариант, если вы используете XmlSerializer
, хотя - за собственность, скажем, Foo
, вы просто добавить:
public bool ShouldSerializeFoo() {
// return true to serialize, false to ignore
}
или:
[XmlIgnore]
public bool FooSpecified {
get { /* return true to serialize, false to ignore */ }
set { /* is passed true if found in the content */ }
}
Они применяются исключительно как соглашение, основанное на названиях.
Thanks, Marc. Например, если у меня есть экземпляр List, где MyClass имеет три свойства X, Y и Z, можно ли включить только свойства X и Y и игнорировать Z для каждого элемента в списке, а затем отправить этот список в DataContractSerializer и сериализатор будет включать только X и Y на выходе и игнорировать Z? Я просто хочу исключить некоторые свойства для каждого элемента в списке. Возможно ли это с некоторыми параметрами, указанными выше? –
Joxi
В случае необходимости сериализации 'X' и' Y', но не 'Z'; с DCS, который доступен только (насколько я знаю), если он применим к ** всем ** элементам, то есть путем выбора '[DataMember]' или '[IgnoreDataMember]' соответственно; DCS не имеет условной сериализации, насколько мне известно. –