WCF Служба отдыха неизвестный список типов недвижимости - PullRequest
0 голосов
/ 12 августа 2011

Я использую сервис REST, который всегда возвращает объект типа ServiceResult .Крутая вещь в WCF заключается в том, что десериализация xml выполняется автоматически.Ниже приведены два примера контрактов операций:

[ServiceContract]
[XmlSerializerFormat]
public interface IMyService
{
    [OperationContract]
    [WebGet(
        BodyStyle = WebMessageBodyStyle.Bare,
        ResponseFormat = WebMessageFormat.Xml,
        UriTemplate = "authenticate?api={apiKey}&userName={userName}&password={password}")]
    ServiceResult Authenticate(string apiKey, string userName, string password);

    [OperationContract]
    [WebGet(
        BodyStyle = WebMessageBodyStyle.Bare,
        ResponseFormat = WebMessageFormat.Xml,
        UriTemplate = "getSchedules?api={apiKey}&user={userAccessCode}&states={states}&types={types}&filter={filter}")]
    ServiceResult GetSchedules(string apiKey, string userAccessCode, string states, string types, string filter);

}

Объект ServiceResult содержит два элемента: Состояние простая строка и Результат , который является объектом (так может быть что угодно).Если я использую объект в качестве его типа, после десериализации я получаю список узлов XmlNode.Поэтому я создал абстрактный класс Result , который действует как суперкласс для всех ожидаемых типов:

[Serializable()]
[XmlRoot("ServiceResult", Namespace = "http://schemas.datacontract.org/2004/07/DTOModel.OpenApi")]
public class ServiceResult
{
    [XmlElement("Result")]
    public Result Result { get; set; }
    [XmlElement("State")]
    public string State { get; set; }
}

...

[XmlInclude(typeof(UserDto)), XmlInclude(typeof(ScheduleDto))]
[XmlType(Namespace = "http://schemas.datacontract.org/2004/07/DTOModel.Management")]
public abstract class Result
{
}

Это прекрасно работает, я могуприведите суперкласс к правильному подклассу после десериализации.Но вот моя проблема: результатом также может быть массив, и я не могу создать класс (используя CollectionDataContract ), который наследуется от Result и является массивом (или списком в этом отношении) ...

Есть решение или я все неправильно смотрю?

Спасибо

...