我正在使用 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。我发现我需要在类正确序列化之前向类添加新的构造函数。