из случаев, которые я видел в общем использовании, он используется для принудительного применения типа к коллекции. в приведенном выше примере, если вы опустите атрибут, тогда среда выполнения сериализуется в ArrayOfDogList
, и множество конструкций может десериализоваться из ArrayOf
, где, как если бы у вас был атрибут, у вас есть для десериализации к типу DogList, который был бы несколько ограничительным и, как говорится, «ставит под угрозу взаимозаменяемость коллекции».
Я немного удивлен твоим примером выше. Большинство случаев использования, которые я видел, было бы больше похоже на
[CollectionDataContract(...)]
public class DogList : List<Dog>
{
}