我有一个类,我通过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;
我收到错误:
Type是一个接口或抽象类,无法实例化。
这是因为System.Text.Encoding
是一个抽象类。有没有办法让我反序列化System.Text.Encoding
类?
答案 0 :(得分:2)
您可以序列化Encoding
属性,并在反序列化时调用Encoding.EncodingName
方法来创建实例,而不是序列化Encoding.GetEncoding(name)
实例。
答案 1 :(得分:0)
Sriram Sakthivel的答案最终没有奏效(请参阅评论),但是序列化其他属性背后的基本思想是正确的方法。
序列化Encoding.EncodingName
而不是使用Encoding.WebName
。 Encoding.GetEncoding( string name )
接受WebName
属性的值:
首选编码的代码页名称。 WebName属性返回的任何值都是有效的。可能的值在“编码类”主题中出现的表的“名称”列中列出。
因此反序列化变为Encoding.GetEncoding( "utf-8" )
。