У меня есть следующий интерфейс
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());