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= 中的任何属性]
我有一个界面如下
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= 中的任何属性]