2017-02-01 7 views
0

В пределах [DataContract] на моей службы WCF я определил:WCF ArrayOfAnyType - что это такое и почему он генерируется из ArrayList в определении WSDL?

[DataMember] 
public ArrayList attributeNames {get; set;} 

И полученное определение в моем файле WSDL выглядит следующим образом:

<xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="attributeNames" nillable="true" type="q1:ArrayOfanyType"/> 

На моем клиенте, однако, что тип признается object[]. Почему это? И как я могу использовать ArrayList [DataMember] от клиента, если он напечатан как object[]?

Я видел эту ссылку: https://social.msdn.microsoft.com/Forums/vstudio/en-US/e9342aae-4045-434c-a830-ea89451a8e0d/convert-arrayofanytype-web-service-to-arraylist?forum=csharpgeneral

Но я не знаю, как дженерики может помочь мне здесь ...

+0

Основываясь на имени 'attributeNames', я предполагаю, что arraylist содержит строки. Верный? Если это так, «Список », вероятно, будет легче работать, и ваш клиент будет иметь строку «] [] или, возможно,« Список »в зависимости от того, как вы создали прокси-класс клиента. – user1429080

+0

Вы можете использовать 'List ' или создать 'CollectionDataContract', более подробно здесь: http://stackoverflow.com/questions/37586165/serializing-data-using-xmlarrayitemattribute-not-working-well/37592775# 37592775 –

+0

@ пользователь1429080 спасибо, что ответ. На самом деле у меня есть другая переменная, называемая атрибутом атрибутов, которая может быть разных типов внутри одного и того же списка/массива. –

ответ

1

Как отмечено в этом question ArrayList просто список общих объектов. Это в основном то же, что и Object []. Какие дженерики могут сделать для вас здесь, это позволяет вам иметь одну конечную точку (или функцию), которая может принимать разные объекты. Использование ArrayList говорит мне, что вы можете возвращать разные объекты в зависимости от логики. Вызывающий конец вашего api должен иметь возможность справиться с этим, если вы собираетесь использовать genarics.

+0

ArrayList будет списком различных объектов, не обязательно одного и того же типа в списке. Разрешат ли такие дженерики, как List ? –

+1

С ArrayList вы правы, каждый элемент может быть другого типа. Что касается списка , то T является типом, который определяется вызывающим методом и/или объявлением, поэтому существует один тип, а не кратность. –