WebAPI Удалить элемент z: anyType из результатов XML - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть следующий интерфейс

public interface IResponse
{
    IResponse GetSuccessResponse();
    IResponse GetErrorResponse();
}

У меня есть различные классы, которые реализуют логику следующим образом

[KnownType(typeof(DefaultResponse))]
[DataContract(Namespace = "")]
public class DefaultResponse : IResponse
{
    [DataMember(Order = 0)]
    public string Status { get; set; }

    [DataMember(Order = 1)]
    public string Info { get; set; }

    public IResponse GetSuccessResponse()
    {
        return new DefaultResponse()
        {
            Status = "Accept",
            Info = "Success"
        };
    }

    public IResponse GetErrorResponse()
    {
        return new DefaultResponse()
        {
            Status = "Reject",
            Info = "Fail"
        };
    }
}

При возврате ответа в моем WebAPI я использую фабрикушаблон для получения необходимого типа IResponse и вызова IResponse.GetErrorResponse.Проблема в том, что он всегда генерирует XML, как показано ниже:

<z:anyType xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="" i:type="DefaultResponse" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
    <Status>Reject</Status>
    <Info>Fail</Info>
</z:anyType>

Есть ли способ избавиться от элемента z: anyType и заменить его фактическим именем класса.Это работает, если я использую класс напрямую, но не с задействованным интерфейсом.

Я создаю ответ, используя следующий тип кода:

return request.CreateResponse(HttpStatusCode.InternalServerError, responseType.GetErrorResponse());

1 Ответ

0 голосов
/ 17 декабря 2018

В итоге я немного изменил это, чтобы вместо этого использовать собственный сериализатор, как показано в следующем ответе Веб-API - Сериализация с динамическим преобразованием в XML

Это дало мне наибольшую гибкость, поскольку позволяетвывести именно то, как класс выглядит в XML без каких-либо атрибутов класса

...