.net - Web API.Net 响应类型和序列化
问题描述
对于以下内容:
public class ClientReturnWrapper<T> : ClientReturnWrapperBase
{
public ClientReturnWrapper(T returnData) => ReturnData = returnData;
public T ReturnData { get; set; }
}
public class ClientReturnWrapperBase
{
public DateTime Timestamp => DateTime.Now;
public bool HasErrors => ClientReturnErrors != null;
public IList<ClientReturnError> ClientReturnErrors { get; set; }
}
public class ClientReturnError
{
public string ErrorMessage { get; set; }
public bool ErrorIsFatal { get; set; }
}
这个:
public ClientReturnWrapper<int> Test()
{
return new ClientReturnWrapper<int>(1);
}
回报:
{"ReturnData":1,"Timestamp":"2019-10-02T12:38:50.9493925+01:00","HasErrors":false,"ClientReturnErrors":null}
然而:
public ClientReturnWrapperBase TestError()
{
return new ClientReturnWrapperBase();
}
回报:
<ClientReturnWrapperBase xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Shiva.Models">
<ClientReturnErrors i:nil="true"/>
</ClientReturnWrapperBase>
这些都是从浏览器调用的,我希望XML
两者都可以,但是前者返回JSON
,而后者正确返回XML
,尽管缺少属性。
这是什么原因造成的?
编辑:为了解决下面的问题,JSON
即使在特别请求时也会返回XML
,所以我怀疑 XML 序列化程序无法序列化泛型。有解决方法吗?其次,为什么在第二个示例中使用 XML 序列化程序时缺少属性?
解决方案
WebAPI 会根据你客户端发送的 Accept 头自动发送 JSON 或 XML,如果你想获取 XML,只需在客户端请求头中添加
Accept:text/html,application/xhtml+xml,application/xml;
推荐阅读
- python - 熊猫将字符串数组转换为具有混合数据类型的数据框
- css - 固定网格中按钮的位置
- reactjs - 选择后React-bootstrap无法取消选择单选按钮?
- kubernetes - 从 Kubernetes pod 副本卷曲到其他副本 pod 连接失败。拒绝连接
- perl - 从旧的 32 位 Perl 转换到 64 位 Perl 的 GDBM_File 互操作性问题
- android - 图标无法显示在操作栏中
- java - 使用 onAction 属性返回按钮文本
- linux - 使用英特尔编译器在 linux 机器上配置 openmpi 64 位时出错
- python - Matplotlib 将 y 轴放在右侧,标签翻转
- firebase - 迭代firestore中的集合和子集合