В дополнение к другим ответам пространство имен в DataContract допускает два объекта с одинаковым именем в разных пространствах имен - например, управление версиями.
Эти два объекта могут существовать как разные свойства в WSDL и будут известны десериализуемые типы при условии, что они имеют разные пространства имен:
[DataContact(Namespace = "http://myservice/v1/thing")]
V1.Thing
[DataContact(Namespace = "http://myservice/v2/thing")]
V2.Thing
Конечно, они должны существовать и в вашем коде C #, чтобы он был действительным. Или, альтернативно, вы можете изменить имя, которое объекты известны с помощью атрибута Name для ясности.
[DataContact(Name = "Thing")]
V1.Thing
[DataContact(Name= = "newThing")]
V2.Thing
Вы можете использовать это, когда имя класса изменилось в вашем проекте, но вам нужно поддерживают существующие клиенты, которые используют «старые» имена.
Таким образом, свойства Name и Namespace управляют тем, как ваши объекты будут сериализованы и десериализованы при передаче по проводу. Когда вы их устанавливаете, вы контролируете, как клиент увидит ваши данные.