Нет реальной базы для сравнения, если все, что вы делаете, это сериализацию и десериализацию из XML, кроме синтаксических различий и незначительных функций. Самое мощное преимущество DataContract перед Serializable - то, что каждый, кажется, пропускает - это то, что контракты данных не являются специфичными для XML .
При работе с контрактами данных существует только две логические конструкции: контракты данных и элементы данных (члены контракта данных). В контракте данных нет таких вещей, как «элементы» или «элементы XML».
Теоретически, сериализация на основе контракта данных позволяет представить структуру объекта в любом формате обмена данными, хотя на данный момент в .NET Framework доступны только AFAIK только сериализация / десериализация XML и JSON. Однако, безусловно, можно создать сериализатор, который работает, скажем, с RDF, и я подозреваю, что существуют дополнительные сериализаторы.
Рассмотрим следующую простую архитектуру:
C #
[DataContract]
class Company
{
[DataMember]
public string Name { get; set }
[DataMember]
public Person[] People { get; set }
}
[DataContract]
class Person
{
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
}
Этот контракт не относится к XML. Вы не указали ничего связанного с XML. Вы можете сериализовать экземпляр вышеупомянутой архитектуры в XML:
XML
<Company>
<Name>...</Name>
<People>
<Person>
<FirstName>James</FirstName>
<LastName>Sunderland</LastName>
</Person>
...
</People>
</Company>
... или в JSON:
JSON
{
"Company": {
"Name": "...",
"People": [
{
"FirstName": "James",
"LastName": "Sunderland"
},
...
]
}
}
... или в любой произвольный формат обмена данными, если у вас есть сериализатор для этого формата.
Это очень мощный и гибкий инструмент, особенно если у вас есть веб-сервис, который используется несколькими типами клиентов и партнеров, или если группа пользователей вашего веб-сервиса будет расширяться в будущем:
- JSON легче сериализовать / десериализовать на серверах JavaScript и PHP (или на любом динамическом языке),
- XML проще для сериализации / десериализации в клиентах WCF.
Если вы не хотите ограничивать себя XML как единственным форматом обмена данными в своей архитектуре приложения, я рекомендую вам использовать DataContract. В противном случае Serializable немного более полезен только для XML.