是否可以将System.Text.Encoding类从JSON反序列化为C#中的代码?

时间:2015-08-10 11:25:14

标签: c# json serialization

我有一个类,我通过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类?

2 个答案:

答案 0 :(得分:2)

您可以序列化Encoding属性,并在反序列化时调用Encoding.EncodingName方法来创建实例,而不是序列化Encoding.GetEncoding(name)实例。

答案 1 :(得分:0)

Sriram Sakthivel的答案最终没有奏效(请参阅评论),但是序列化其他属性背后的基本思想是正确的方法。

序列化Encoding.EncodingName而不是使用Encoding.WebNameEncoding.GetEncoding( string name )接受WebName属性的值:

  

首选编码的代码页名称。 WebName属性返回的任何值都是有效的。可能的值在“编码类”主题中出现的表的“名称”列中列出。

因此反序列化变为Encoding.GetEncoding( "utf-8" )