fro*_*sty 17 c# serialization json.net
我正在使用JSON.NET 6.0.1.当我使用该SerializeObject方法序列化派生类的对象时,它仅从基类序列化属性.这是代码片段:
string v = JsonConvert.SerializeObject(
service,
Formatting.Indented,
new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.All
});
Run Code Online (Sandbox Code Playgroud)
基类:
[DataContract]
public abstract partial class DataEntity : IDataEntity, INotifyPropertyChanging, INotifyPropertyChanged
{
...
}
Run Code Online (Sandbox Code Playgroud)
派生类:
[Table(Name = "dbo.mytable")]
public sealed class mytable : DataEntity
{
...
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
Bri*_*ers 24
是的,您缺少[DataContract]派生类的属性.[DataMember]如果尚未添加序列化,还需要添加到要序列化的任何属性或字段.这在DataContractAttribute课程的文档中有详细说明,如下所述(强调我的):
注意
数据协定与其继承行为中的实际接口有很大不同.接口由任何派生类型继承.将DataContractAttribute应用于基类时,派生类型不会继承属性或行为.但是,如果派生类型具有数据协定,则基类的数据成员将被序列化.但是,必须将DataMemberAttribute应用于派生类中的新成员才能使其可序列化.
Json.Net在版本5.0发行版1(2013年4月)中更改为遵循此行为.
请注意,如果您删除的所有实例[DataContract],并[DataMemeber]从你的类,Json.Net表现不同:在这种情况下,默认行为是Json.Net连载所有的公共属性,无论是在基类和派生类.
| 归档时间: |
|
| 查看次数: |
14765 次 |
| 最近记录: |