Wystarczy wyłożyć na odpowiedź Andrieja i podzielić się moim doświadczeniem, po prostu przeszedł problem, że w końcu rozwiązany za pomocą CollectionDataContract. Zasadniczo, w celu do współpracy z konkretnym systemem, chciałem, aby móc wysyłać i odbierać XML w formacie:
<SomeMessageList>
<Message>
<ID>blah</ID>
<data1>blah</data1>
<data2>etc.etc.</data2>
</Message>
<Message>
<ID>blah</ID>
<data1>blah</data1>
<data2>etc.etc.</data2>
</Message>
//any number of repeated <Message> here
</SomeMessageList>
Jednakże, jeśli użyłem tablicę lub obiekt listy, znacznik korzeń był zawsze nazywany ArrayOfMessage. I jeśli utworzyłem klasę, która zawierała tablicę obiektów Message (powiedzmy MsgList), to WCF dodałaby to jako dodatkowy tag w miksie, którego nie mogłem znaleźć sposobu na pozbycie się. Więc byłoby to wyglądało:
<SomeMessageList>
<MsgList>
<Message>
<ID>blah</ID>
<data1>blah</data1>
<data2>etc.etc.</data2>
</Message>
//any number of repeated <Message> here
</MsgList>
</SomeMessageList>
tak CollectionDataContract prostu dał mi prosty sposób kontrolować nazwę elementu listy korzeni.
ciekawe .... – Seva
Dzięki! Używałem tego, ale musiałem również wywołać konstruktor bazowy, aby generowanie strony pomocy działało - więc w twoim przykładzie zamień: "public Users() {}" na "public Users(): base() {}". –
@IanGrainger Coś jeszcze musiało być nie w porządku - konstruktor bazowy no-arg jest wywoływany automatycznie, jeśli nie podano inaczej. – user2864740