json.net 不会序列化派生类中的属性



我正在使用 JSON.NET 6.0.1。当我使用 SerializeObject 方法序列化派生类的对象时,它仅序列化基类中的属性。 以下是代码片段:

string v = JsonConvert.SerializeObject(
                service, 
                Formatting.Indented, 
                new JsonSerializerSettings()
                {
                    TypeNameHandling = TypeNameHandling.All
                });

基类:

[DataContract]
public abstract partial class DataEntity : IDataEntity, INotifyPropertyChanging, INotifyPropertyChanged
{
    ...
}

派生类:

[Table(Name = "dbo.mytable")]
public sealed class mytable : DataEntity
{
    ...
}

我错过了什么吗?

是的,您缺少派生类上的 [DataContract] 属性。 还需要向要序列化的任何属性或字段添加[DataMember](如果尚未添加)。 Json.Net 在版本 5.0 第 1 版(2013 年 4 月)中进行了更改,因此不会继承 [DataContract] 属性。

请注意,如果从类中删除 [DataContract][DataMemeber] 的所有实例,Json.Net 的行为会有所不同:在这种情况下,默认行为是让 Json.Net 序列化基类和派生类中的所有公共属性。

将属性

[JsonObject(MemberSerialization.OptOut)]添加到派生类将包括要序列化的所有公共成员。

[Table(Name = "dbo.mytable")]
[JsonObject(MemberSerialization.OptOut)]
public sealed class mytable : DataEntity
{
    ...
}

或者,如果只希望序列化派生类的某些属性,则可以将属性[JsonProperty]添加到每个属性(这相当于向每个属性添加[DataMember]以及类上的[DataContract])。

JsonConvert.SerializeObject 只返回 {} for me。我发现我需要在类正确序列化之前向类添加新的构造函数。

相关内容

  • 没有找到相关文章

最新更新