小编And*_*ell的帖子

NewtonSoft.Json使用IEnumerable类型的属性序列化和反序列化类<ISomeInterface>

我试图移动一些代码来使用ASP.NET MVC Web API生成的Json数据而不是SOAP Xml.

我遇到了序列化和反序列化类型属性的问题:

IEnumerable<ISomeInterface>.
Run Code Online (Sandbox Code Playgroud)

这是一个简单的例子:

public interface ISample{
  int SampleId { get; set; }
}
public class Sample : ISample{
  public int SampleId { get; set; }
}
public class SampleGroup{
  public int GroupId { get; set; }
  public IEnumerable<ISample> Samples { get; set; }
 }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令轻松序列化SampleGroup的实例:

var sz = JsonConvert.SerializeObject( sampleGroupInstance );
Run Code Online (Sandbox Code Playgroud)

但是相应的反序列化失败:

JsonConvert.DeserializeObject<SampleGroup>( sz );
Run Code Online (Sandbox Code Playgroud)

使用此异常消息:

"无法创建JsonSerializationExample.ISample类型的实例.Type是接口或抽象类,无法立即显示."

如果我派生出一个JsonConverter,我可以按如下方式装饰我的属性:

[JsonConverter( typeof (SamplesJsonConverter) )]
public IEnumerable<ISample> Samples { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是JsonConverter:

public class SamplesJsonConverter : …
Run Code Online (Sandbox Code Playgroud)

c# serialization json json.net deserialization

63
推荐指数
4
解决办法
22万
查看次数

标签 统计

c# ×1

deserialization ×1

json ×1

json.net ×1

serialization ×1