我一直在尝试以这样的方式对我的对象进行序列化和反序列化,使我能够指定某些属性被序列化但不被反序列化。
以下是示例代码:
如果我从类
但是现在反序列化失败了,并出现以下错误,因为json.net尝试构造接口ISupYo...
以下是示例代码:
public interface ISupYo
{
string Hi { get; }
}
public class SupYo : ISupYo
{
public string Hi { get; } = "heya";
}
public interface ISup
{
int hiyo { get; }
}
public class Sup : ISup
{
public Sup(int hiyo)
{
this.hiyo = hiyo;
}
public int hiyo { get; }
public ISupYo yo => new SupYo();
}
var myNewSup = JsonConvert.SerializeObject(new Sup(2));
var mySup = JsonConvert.DeserializeObject<Sup>(myNewSup);
如果我从类
Sup
中删除构造函数,一切都很好。但是现在反序列化失败了,并出现以下错误,因为json.net尝试构造接口ISupYo...
Newtonsoft.Json.JsonSerializationException: 'Could not create an instance of type Scratchpad.Program+ISupYo. Type is an interface or abstract class and cannot be instantiated. Path 'yo.Hi', line 1, position 21.'
我尝试了这里的指示 在Json.Net中序列化属性但不反序列化属性,但反序列化以相同方式失败。
使用JsonConverter的方式http://pmichaels.net/tag/type-is-an-interface-or-abstract-class-and-cannot-be-instantiated/是成功的,同时在序列化/反序列化期间指定typeNameHandling和format handling也是成功的。
为什么在使用/不使用默认构造函数之间会存在差异?