如何在自定义 JsonConverter 中使用默认序列化

2023-12-02

我有一个复杂的对象图,我正在使用 Json.NET 对其进行序列化/反序列化。一些对象派生自抽象类,因此为了使反序列化正常工作,我需要创建一个自定义JsonConverter。它的唯一作用是在反序列化时选择抽象类的适当具体实现,并允许 Json.NET 继续其方式。

当我想序列化时,我的问题就出现了。我根本不需要做任何定制的事情。我想要获得与使用完全相同的行为JsonConvert.SerializeObject没有定制JsonConverter.

但是,由于我使用自定义 JsonConverter 类来满足我的反序列化需求,因此我被迫提供一个WriteJson执行。由于 WriteJson 是抽象的,我不能只调用base.WriteJson,但我基本上想做到这一点。所以我的问题是,我应该在该方法中放入什么来获得简单的默认行为?换句话说:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    // What goes here to get default processing?
}

按照您的习惯JsonConverter, 覆盖CanWrite并返回 false:

public override bool CanWrite { get { return false; } }

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    throw new NotImplementedException();
}

然后你可以抛出一个异常WriteJson,因为它不会被调用。

(同样,要在de序列化、覆盖CanRead并返回false.)

请注意,相同的方法可用于JsonConverter<T>(引入于Json.NET 11.0.1)因为它只是一个子类JsonConverter引入了类型安全版本ReadJson() and WriteJson().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在自定义 JsonConverter 中使用默认序列化 的相关文章

随机推荐

  • Mysql 递归存储过程...达到限制 0...无法更改 max_sp_recursion_depth 变量

    更新 好的 我能够调试这个并发现通过这样做select max sp recursion depth我可以看到该变量设置为 15 但是 当我使用以下命令运行回调时CALL single limb portfolio list xaccoun
  • Neo4J 在 Cypher 中创建临时变量

    所以我的顶级问题是我试图返回是否MERGE导致是否创建新节点 为了做到这一点 我想我可以创建一个简单的临时布尔值 将其设置为 TRUE 使用ON CREATE 我想象它是如何工作的 MERGE Person id Tom Jones WIT
  • 如何在WP8列表框内绑定数据用户控件

    我有一个用户控件 它有一个TextBlock 我想在其中绑定文本
  • 可以同时运行两个无限循环吗?

    我希望能够拥有两个while True循环同时运行 这可能吗 我对Python非常陌生 所以我不知道如何解决这个问题 这是我制作的代码 import time def infiniteLoop while True print Loop 1
  • 使用 NavigationView 进行交叉导航

    我有以下结构 enum Page case chapter1 case chapter2 struct ContentView View State var page Page nil var body some View Navigati
  • 安装 WIF 运行时以在 Windows Azure 中托管 .NET 应用程序

    我开发了一个自定义应用程序 它能够使用 CRM Web 服务并从自定义 NET 页面在 CRM 中执行 Windows Live Id 身份验证 创建 读取和更新操作 当我在 Visual Studio 2010 中调试应用程序时 它运行得
  • jQuery UI 多个可排序列:滚动问题

    jQuery 1 9 1 jQuery 用户界面 1 10 1 请看小提琴 td class my column div class my div class p class para item para 101 p div td td d
  • 操作系统升级后,我的 ANT 版本无法正常工作

    我最近将系统从 Mint12 升级到 Mint14 并且在让旧项目在新系统上正常运行方面遇到了严重问题 总结一下 让 Mint14 正常工作并安装了我所有必需的软件 Eclipse ANT 等 从备份磁盘恢复我的文件 将 Oracle JD
  • Facebook iPhone 应用程序支持哪些自定义 URL 方案?

    Note 这些 URL 可能不可用 Facebook 已更新多次 但并未正式支持其中任何一个 Note 我正在尝试查看有关 iPhone 上的 Facebook 应用程序的可用信息 到目前为止 我发现了几个包含有限信息的网站 并且我能够弄清
  • C++ DLL 插件接口

    我打算做一个 C 插件接口 ala如何从 dll 创建某个类 dll 中的构造函数 但有人担心 如果使用该接口通过 MinGW 或 Borland 创建 DLL 并且 DLL 加载器是用 MSVC 编译的 可能会出现问题 由于唯一的导出函数
  • 复制句柄类的 MATLAB 对象

    我在 MATLAB 中实现了一个句柄类 并尝试通过调用以下两个函数来复制该类的对象 objByteArray getByteStreamFromArray obj newObj getArrayFromByteStream objByteA
  • 3D 中的 Numpy 网格

    Numpy 的网格网格对于将两个向量转换为坐标网格非常有用 将其扩展到三维空间的最简单方法是什么 因此 给定三个向量 x y 和 z 构造可用作坐标的 3x3D 数组 而不是 2x2D 数组 Numpy 我认为从 1 8 开始 现在支持高于
  • 找到噪声图像边缘的最佳方法

    我有一个噪声图像 如下图所示 假设它是高斯噪声 目前 我使用两个步骤来寻找边缘 使用高斯滤波器 G 平滑图像 根据方程找到边缘 g 1 1 I G 2 其中 G 是高斯滤波器 是控制噪声水平的权重 然而 高斯滤波器是图像边缘丢失的原因 我想
  • 带参数的 Prolog DCG

    我不知道如何使用参数来处理 DCG 假设我们想用 DCG 来代表父母和他们的孩子 那么我们可以说 father gt Peter mother gt Isabel child gt Guido child gt Claudia verb g
  • 从 JTextPane 中的任何偏移量获取样式

    有没有办法得到Style 样式名称或者只是比较是否Style在某个位置JTextPane与我在插入时给文本的样式 因为为了我的目的 我创建了自定义JTextPane StyledDocument and DocumentFilter 所以我
  • 将输入字符串转换为 float/double C++

    所以我知道如何在 C 中执行此操作 但不知道如何在 C 中执行此操作 我正在尝试将给定用户输入解析为双精度 以便稍后进行数学运算 但我是 C 新手 并且遇到了麻烦 帮助 C public static class parse public
  • gmail api 给出 failedPrecondition 错误

    我无法让 gmail api 工作 我正在使用 JWT 进行服务器到服务器身份验证 google api python client 1 4 0 httplib2 0 9 oauth2client 1 4 7 pycrypto 2 6 1
  • 如何设置“discrete_distribution”向量 C++

    我正在尝试模拟马尔可夫链之类的东西 并使用discrete distribution来模拟状态s i到s j的变化 但当然 这是一个矩阵 而不是向量 所以我尝试一下 std vector
  • gcc,内联汇编 - Pushad/popad 丢失?

    有什么方法可以避免复制粘贴pushad popad指令体到我的代码中 因为 gcc 当前标志 Wall m32 抱怨说 asm pushad 错误 没有这样的指令 pushad asm popad 错误 没有这样的指令 popad GCC
  • 如何在自定义 JsonConverter 中使用默认序列化

    我有一个复杂的对象图 我正在使用 Json NET 对其进行序列化 反序列化 一些对象派生自抽象类 因此为了使反序列化正常工作 我需要创建一个自定义JsonConverter 它的唯一作用是在反序列化时选择抽象类的适当具体实现 并允许 Js