Я думаю, что у меня есть ответ для вас.Не видя вашего DataContracts
, я отчасти догадываюсь, что вы используете и как структурированы ваши данные.Но здесь идет ...
Я использую VS2010, C #, WCF REST и .NET 4. Для этого.
По умолчанию ваша коллекция или массив использует пространство имен по умолчанию для поддержаниясовместимость, когда он становится сериализованным.Итак, ваша сериализация ведет себя как задумано.
Обойти это можно, если создать собственную коллекцию и использовать для нее атрибут CollectionDataContract
.После этого вы получаете больше контроля над тем, как он сериализуется, включая его пространство имен.Вот подробное объяснение об этом из MSDN.
Итак, я создал собственную коллекцию и использовал пространство имен CollectionDataContract
как таковое:
[CollectionDataContract(Namespace="")]
public class StringItem2 : Collection<string>
{
}
Нет свойствтак как в этой коллекции будут только строки.
У меня тогда есть DataContract
, в котором содержится моя пользовательская коллекция строк:
[DataContract(Namespace="", IsReference=false)]
public class SampleItem
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string StringValue { get; set; }
[DataMember]
public StringItem2 StringItems2 { get; set; }
}
Теперь, когда я это сделал, у меня есть простой WCFСлужба RESTful (GET):
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Service1
{
[WebGet(UriTemplate = "{id}")]
public SampleItem Get(string id)
{
SampleItem si = new SampleItem()
{
Id = 10,
StringValue = "foo",
StringItems2 = new StringItem2() { "Hola", "como", "esta", "usted" }
};
return si;
}
}
Когда я запрашиваю эту услугу (http://localhost:xxxx/Service1/10),), в ответ я получаю следующий XML:
<SampleItem xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Id>10</Id>
<StringItems2>
<string>Hola</string>
<string>como</string>
<string>esta</string>
<string>usted</string>
</StringItems2>
<StringValue>foo</StringValue>
</SampleItem>
Надеюсь, это поможет.дайте мне знать, если есть дополнительные детали, которые я пропустил, или если есть еще вопросы. Я обновлю свой ответ соответственно.