WebAPI 从 XML 个结果中删除 z:anyType 个元素

WebAPI Remove z:anyType Element from XML Results

我有一个界面如下

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

然后我有各种 class 实现逻辑如下

[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 元素并用实际的 class 名称替换它。如果我直接使用 class 但不使用涉及的接口,它会起作用。

我正在使用以下类型的代码创建响应:

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

我最终对此进行了一些更改,改为使用自定义序列化程序,如下面的答案 Web API - Dynamic to XML serialization

这为我提供了最大的灵活性,因为它允许您准确输出 class 在 XML 中的样子,而不需要 class[=11= 中的任何属性]