2009-08-24 2 views
1

Можно создать дубликат:
Replacement for XML Serialization.NET Сериализация XML в 2009

Это что-то новое, кроме old XmlSerializer на мир XML сериализации в .Net вселенной?

Обновление: Возможно, это дубликат better asked question.

+0

Я ненавижу спросить об этом, но что не так с XmlSerializer? –

+0

@sztomi: неспособность работать с IEnumerable меня действительно раздражает. –

ответ

7

DataContractSerializer

Он используется 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], а версии для сериализации, а также.

+1

Остерегайтесь, что конструктор не вызывается с помощью DataContractSerializer –

+0

Хорошая точка. Это меня смутило из-за этого, прежде чем я понял это :) – Thorarin

Смежные вопросы