json.net does not serialize properties from derived class(json.net 不序列化派生类的属性)
问题描述
我正在使用 JSON.NET 6.0.1.当我使用 SerializeObject 方法序列化派生类的对象时,它仅序列化基类的属性.以下是代码片段:
I'm using JSON.NET 6.0.1. When I use the SerializeObject method to serialize an object of my derived class, it serializes properties from base class only. Here is the code snippet:
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 中进行了更改(4 月2013)这样 [DataContract] 属性不会被继承.
Yes, you are missing the [DataContract] attribute on the derived class. You also need to add [DataMember] to any properties or fields that you want serialized, if you haven't already added them. Json.Net was changed in version 5.0 release 1 (April 2013) such that the [DataContract] attribute is not inherited.
请注意,如果您从您的类中删除所有 [DataContract] 和 [DataMemeber] 实例,Json.Net 的行为会有所不同:在在这种情况下,Json.Net 的默认行为是序列化所有公共属性,包括基类和派生类.
Note that if you remove all instances of [DataContract] and [DataMemeber] from your classes, Json.Net behaves differently: in that case, the default behavior is for Json.Net to serialize all public properties, both in the base and derived classes.
这篇关于json.net 不序列化派生类的属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:json.net 不序列化派生类的属性
基础教程推荐
- C# 从 List<List<int>> 中删除重 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
- WPF 模态进度窗口 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
