使用JSON.NET对派生对象进行序列化/反序列化而不使用JsonProperty?

4
我正在使用NewtonSoft JSON.NET库对下面的类进行序列化,其中DTOBase可以保存派生实例。
public class Command
{         
    public DTOBase CommandDTO  { get; set; }                
}

根据这篇文章,您需要包括JsonProperty属性,以便正确反序列化派生的实例。
public class Command
{ 

  [JsonProperty(TypeNameHandling = TypeNameHandling.All)]  
  public DTOBase CommandDTO  { get; set; }       
 }

除了使用属性以外,是否还有其他方式可以达到相同的结果?我不想在类级别上与NewtonSoft库和JSON序列化紧密耦合。是否有一种方法可以在序列化/反序列化方法中指定某些设置以获得相同的结果?

1个回答

4

TypeNameHandling属性可以在调用JsonConvert.SerializeObject(value, settings)时在JsonSerializerSettings上设置。

如果您只想为派生对象包含名称,则将TypeNameHandling设置为TypeNameHandling.Auto即可。


嗨,詹姆斯,我尝试了这个方法,但它没有起作用,序列化字符串不包含属性的类型信息,就像我使用JsonProperty属性时那样。v var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All}; string serializedInstance = JsonConvert.SerializeObject(myobject,Formatting.None,settings); - Abhijeet Patel
看起来我使用的是旧版本的库。我升级到最新版本后,带有TypeNameHandling.Auto的JsonSerializerSettings按预期工作。 - Abhijeet Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接