Можно создать дубликат:
Replacement for XML Serialization.NET Сериализация XML в 2009
Это что-то новое, кроме old XmlSerializer на мир XML сериализации в .Net вселенной?
Обновление: Возможно, это дубликат better asked question.
Можно создать дубликат:
Replacement for XML Serialization.NET Сериализация XML в 2009
Это что-то новое, кроме old XmlSerializer на мир XML сериализации в .Net вселенной?
Обновление: Возможно, это дубликат better asked question.
Он используется WCF по умолчанию, например. См. here для сравнения.
Лично я ненавижу то, что XmlSerializer
не может делать внутренние типы. У DataContractSerializer нет этой проблемы. Кроме того, DataContractSerializer
проще с дженериками, например. Если вы хотите создать редактируемый XML-формат для человека, он может быть менее идеальным.
Как указал Maxim, DataContractSerializer
ведет себя немного иначе, чем вы могли ожидать: он не вызывает конструктор для десериализации вашего объекта. Если вам нужно выполнить некоторую инициализацию по любой причине, вы можете использовать атрибут [OnDeserializing]
. Я использую шаблон, как это:
[DataContract]
public MyClass
{
public MyClass()
{
Initialize();
}
[OnDeserializing]
private OnDeserializing(StreamingContext context)
{
Initialize();
}
private void Initialize()
{
// Do stuff
}
}
Аналогично, есть атрибут [OnDeserialized]
, а версии для сериализации, а также.
Остерегайтесь, что конструктор не вызывается с помощью DataContractSerializer –
Хорошая точка. Это меня смутило из-за этого, прежде чем я понял это :) – Thorarin
Я ненавижу спросить об этом, но что не так с XmlSerializer? –
@sztomi: неспособность работать с IEnumerable меня действительно раздражает. –