System.Collections.CaseInsensitiveComparer
или
System.StringComparer.OrdinalIgnoreCase
WCF (и DataContractSerializer
в частности) не использует конструкторы. Нет, правда (он использует FormatterServices.GetUninitializedObject
для создания необработанных объектов).
Ожидается, что все данные будут инициализированы либо сериализатором, либо для несериализованных полей - обратными вызовами сериализации, которые вы добавить (например, через [OnDeserialized]
).
Я полностью понимаю причины, но не понимаю, почему они не поддерживают обратные вызовы сериализации в Silverlight. Мне кажется, что в связи WCF - Silverlight я не могу инициализировать свой контракт данных, не взломав себя. Итак, если у меня был частный член в моем базовом классе для внутреннего использования (например, поведение отмены-повтора), я не могу использовать конструктор по умолчанию:
Stack<PropertyChange> UndoStack = new Stack<PropertyChange>();
Это просто не работает. Чтобы заставить его работать, я должен написать что-то вроде этого:
Stack<PropertyChange> _UndoStack;
Stack<PropertyChange> UndoStack
{
get
{
return _UndoStack == null ? (_UndoStack = new Stack<PropertyChange>()) : _UndoStack;
}
}
Мне кажется, это обходной путь. У кого-нибудь есть идеи получше?