【发布时间】:2019-08-22 21:46:49
【问题描述】:
我有一个类,我通过我的 Web API 控制器将它作为 JSON 对象返回。
public class ModelClass
{
public string QueryString {get; set;}
public Encoding Encoding {get; set;}
public BankLinkModel(string queryString , Encoding encoding)
{
this.QueryString = queryString ;
this.Encoding = encoding;
}
}
但是当我尝试使用我的代码在另一个应用程序(进行 API CALL)中反序列化这个模型时:
var responseFromApi = ApiClient.get(string.Format("some/magic/url?id={0}", "663"));
var query = responseFromApi.Content.ReadAsAsync<ModelClass>().Result;
我收到一个错误:
类型是接口或抽象类,不能实例化。
这是因为System.Text.Encoding 是一个抽象类。有没有办法让我反序列化 System.Text.Encoding 类?
【问题讨论】:
-
内容的编码应该设置在适当的HTTP头上,不作为参数传递。
-
如何返回结果? Web API 应该自动处理编码和代码页
-
我们所有的请求都使用 UTF-8 编码,但是对于这个精确的请求,我需要获取编码类,因为我将向第 3 方应用程序发出另一个请求,这不需要UTF-8 编码,但一种特殊的编码(不是标准)
-
然后用 that 请求发送不同的
Accept-Charset标头。 Web API 检查此标头以确定响应的字符集。你用的是什么字符集? Web API 可以处理几乎所有的编码,除非它是新发明的。即使这样,合规的方法是设置Accept-Charset并在控制器的方法中检查其值。这将确保您的 API 适用于任何客户端 -
同样的问题之前是answered in S/O。希望对您有所帮助。
标签: c# json serialization