WCF Web API 0.6 - Возвращая список <T>в HttpResponseMessage выдает исключение - PullRequest
0 голосов
/ 06 февраля 2012

Я довольно новичок в веб-API WCF, у меня есть базовая служба, пытающаяся использовать все возможности использования HttpResponseMessage в качестве возвращаемого типа.Я пытаюсь вернуть список и получаю следующую ошибку, которую я не могу обойти.

Это очень простой прямой XML-сервис.

Будем благодарны за любые идеи.Спасибо.

Тип 'System.Net.Http.HttpResponseMessage`1 [System.Collections.Generic.List`1 [Entities.UploadedDocumentSegmentType]]' не может быть сериализован.Попробуйте пометить его атрибутом DataContractAttribute и пометить все его элементы, которые вы хотите сериализовать, атрибутом DataMemberAttribute.Если тип является коллекцией, попробуйте пометить его с помощью CollectionDataContractAttribute.Сведения о других поддерживаемых типах см. В документации Microsoft .NET Framework.

Вот мой сервис:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class DocumentService
{
    [WebGet(UriTemplate = "/GetAllUploadableDocumentTypes")]
    public HttpResponseMessage<List<UploadedDocumentSegmentType>> GetAllUploadableDocumentTypes()
    {
       UploadedDocumentManager udm = new UploadedDocumentManager();
       return new HttpResponseMessage<List<UploadedDocumentSegmentType>>(udm.GetAllUploadableDocumentTypes());                                        
    }
}

Класс UploadedDocumentSegmentType определен так:

[Serializable]
public class UploadedDocumentSegmentType
{
    public UploadedDocumentSegmentType();

    public int DocTracSchemaID { get; set; }
    public int ID { get; set; }
    public string Type { get; set; }
}

И я тоже это попробовал:

[Serializable]
[DataContract]
public class UploadedDocumentSegmentType
{
    public UploadedDocumentSegmentType();

    [DataMember]
    public int DocTracSchemaID { get; set; }
    [DataMember]
    public int ID { get; set; }
    [DataMember]
    public string Type { get; set; }
}

UDPATE: Я использовал шаблон Visual Studio приложения службы REST WCF для создания службы.Я попытался с нуля и изменить тип возвращаемого значения в образце метода WebGET на WebResponseMessage, и там возникнет та же ошибка.Так что это не мой код, это какая-то конфигурация, которую я не могу понять при жизни ...

1 Ответ

0 голосов
/ 07 февраля 2012

Зачем вам нужно возвращать список ? Просто верните массив, и все должно быть в порядке. Я не думаю, что встроенный JSON-Serializer знает, как обрабатывать список . Разумная вещь, чтобы не знать, как сделать список , является "редактируемой" с помощью вызовов типа добавления / удаления.

Кроме того, вам не нужны атрибуты datacontract / member с wcf-web-api.

...