YamlDotNet - 需要反序列化器来忽略额外的节点或可以处理丢失的节点

2023-11-25

我正在尝试使用 YamlDotNet 来帮助我解析配置文件。我研究了它的文档并发现了两种方法:

  1. 使用YamlStream的Load()方法,然后检查它创建的YamlDocument的节点;
  2. 编写一系列相关类用于结果存储,然后使用 Deserializer 的 Deserialize() 方法自动实例化对象并用数据填充对象。

第一种方法不是特别优雅(代码很乱)。但它允许我在输入文件中拥有额外的“标签:值”对。任何额外的内容都会被忽略。我还可以在代码中使用逻辑来检测是否缺少任何“标签”并跳过尝试读取其值。

第二种方法非常优雅,并且代码非常干净。然而,它会因为额外的“标签:值”对而窒息。此外,如果输入文件中缺少任何预期的“标签:值”对,它也会引发异常。

我正在寻找一种使用第二种方法(调用反序列化方法)的方法,但即使输入文件中存在额外数据或缺少某些内容,也允许它工作。

我没有找到我希望可以应用于对象模型成员的“可选”属性。

如果使用反序列化方法时可能有可选节点或额外未使用的节点,有人可以告诉我吗?


第二种方法其实也是可行的。您需要执行以下操作:

  1. 为 YAML 文件中可能缺少的所有字段指定默认值,如下所示:
[DefaultValue(1)]
public double Priority { get; set; }
  1. 告诉反序列化器忽略不匹配的属性,如以下代码片段所示。
var deserializer = new DeserializerBuilder()
    .IgnoreUnmatchedProperties()
    .Build();
var deserialized = deserializer.Deserialize<T>(input);

我找不到有关此配置选项的任何文档,但对我来说它按预期工作。我唯一能找到的是PR引入该功能的位置。

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

YamlDotNet - 需要反序列化器来忽略额外的节点或可以处理丢失的节点 的相关文章

  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • 具有多种类型的 C# 泛型类型推断

    我有以下通用方法 用于将一种类型的输入对象序列化为超类型 如下所示 public string SerialiseAs
  • .NET IExtenderProvider (C#)

    我正在尝试延长TextBox ComboBox and Panel控制使用IExtenderProvider但我无法让它正常工作 我开始相信我还没有完全理解这个概念 有人知道网络上有什么好的资源 带有示例 吗 IExtenderProvid
  • ASP.NET - 在 GridView 中显示图像和 pdf

    我想在 asp GridView 中显示 图像 列 这个想法是提供图像的缩略图以及实际尺寸图像的链接 对于某些行 这也可以是 PDF 文档 我想要 PDF 的链接 PDF 或图像存储在 SQL 数据库中 现在我在处理程序 ashx 文件中出
  • 为什么 .NET 异步等待文件复制比同步 File.Copy() 调用消耗更多 CPU?

    为什么下面的代码会产生 public static class Program public static void Main params string args var sourceFileName C Users ehoua Desk
  • asp.net net.mail - 在调试模式下将所有电子邮件路由到不同的电子邮件地址

    无论如何 有没有办法让所有电子邮件发送到不同的地址System Web HttpContext Current IsDebuggingEnabled是真的 或者我是否需要一个新的类来用于到处发送电子邮件 我会设置一个 SMTP 服务器 并让
  • C# 模拟接口与模拟类

    我是 net 中的最小起订量框架的新手 根据我的在线研究 似乎有两种方法可以使用这个框架 要么模拟接口 要么模拟具体类 似乎在嘲笑具体类时 只有virtual方法可以被嘲笑 就我而言 我只想模拟实现接口的类的几个方法 例如 如果我们有以下内
  • 如何拦截 .Net 中第三方库对非虚拟方法的调用?

    我认为我需要的是 net 人们称之为 透明动态代理 的东西 但到目前为止我所看到的所有实现 Castle DynamicProxy Spring NET AOP 等 都要求我至少执行以下操作之一 将拦截的方法声明为虚拟方法 包装类并创建包装
  • 发生错误。", ExceptionMessage: "提供的 'HttpContent' 实例无效

    尝试将文件添加到 http 休息调用时出现此错误 responseJson 消息 发生错误 ExceptionMessage 提供了无效的 HttpContent 实例 它确实 正在使用 多部分 参数名称 内容 异常类型 System Ar
  • lambda 表达式是多线程的吗?

    lambda 表达式是多线程的吗 假设当你将数学公式编写为 lambda 方法时 当你将其传递给另一个方法时 它会是多线程的吗 不是100 清楚你问的是什么 您是否想问 lambda 是否自然地在不同的线程上运行 如果是这样 则它们只是 S
  • 如果未返回,则在一段时间后终止线程

    我有一个线程从网络或串行端口获取一些数据 如果 5 秒内没有收到数据 则线程必须终止 或返回 false 换句话说 如果线程运行时间超过 5 秒 则必须停止 我用 C 编写 但任何 NET 语言都可以 有两种方法 1 封装超时 从网络或串行
  • StreamReader 消耗的字节数

    有没有办法知道 StreamReader 使用了流的多少字节 我有一个项目 我们需要读取一个文件 该文件具有文本标题 后跟二进制数据的开头 我最初尝试读取该文件是这样的 private int dataOffset void ReadHea
  • 将 C# 代码转换为 F#(if 语句)

    我想知道如何转换此代码逐行从 C 到 F 我不想使用任何类型的 F 习惯用法或类似的东西 我想了解如何直接映射C 的构造到 F 这是 C 代码 requires l Length gt 0 int GetMinimumValue List
  • & 在 xml 文件中算作一个还是多个字符?

    我正在使用的 XML 模式具有特定的字符串字符长度 所以我可能有一个类似的字符串 Jim Mary 在 C 中是 10 个字符 但是当它写入 xml 时 它会变成 Jim amp Mary 如果 XML 模式规定字符串最多只能有 10 个字
  • EF数据库首先如何针对数据库更改更新模型?

    在班级图书馆Ado net Entity Data Model已生成 POCO 类 这些是第一次生成的 但数据库更改并未得到反映 在edmx图表右键单击并选择Update Model from Database显示新创建的表 但即使选择添加
  • .NET 迭代器包装抛出 API

    我有一个带有 API 的类 它允许我请求对象 直到它抛出一个IndexOutOfBoundsException 我想将它包装到一个迭代器中 以便能够编写更清晰的代码 但是 我需要捕获异常以停止迭代 static IEnumerable It
  • WPF 中的屏幕分辨率问题?

    我将在 WPF 中使用以下代码检测分辨率 double height System Windows SystemParameters PrimaryScreenHeight double width System Windows Syste
  • SSL/TLS/HTTPS 站点在 C#/.NET WebBrowser 控件中非常慢,但在 Internet Explorer 中则很好

    背景 我正在修改自动维基浏览器 http en wikipedia org wiki Wikipedia AutoWikiBrowser使用托管在安全服务器上的 MediaWiki 站点 我允许用户通过 C 应用程序中的 WebBrowse
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同

    System Net WebException 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同 在 System Net FtpWebRequest CheckError 在 System Net FtpWebReque

随机推荐

  • OpenGraph Music music.listens 返回错误[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 遵循此处的规范http developers facebook com docs opengraph music 当我发帖时 发布 https graph facebook
  • 在 C 中使用#pragma

    有哪些用途 pragma用C语言 有例子吗 pragma用于特定于机器或特定于操作系统的编译器指令 即它告诉编译器执行某些操作 设置某些选项 采取某些操作 覆盖某些默认值等 这些指令可能适用于也可能不适用于所有机器和操作系统系统 See m
  • defn 是线程安全的吗?

    我可以实时重新定义函数而不产生副作用吗 defn 是线程安全的吗 线程对于开发来说足够安全 但不适合在生产中使用 使用 defn 重新定义函数可能会破坏调用它的函数 如果它们在调用更改时正在运行 在开发中这是可以的 因为你可以在它中断后重新
  • boost 图形库 - 顶点颜色和 graphviz 输出的最小示例

    作为 boost 图形库的新手 我发现通常很难弄清楚示例的哪些部分与特定示例相关以及哪些部分是通用的 作为练习 我尝试制作一个简单的图形 为顶点分配颜色属性 并将结果输出到 graphviz 以便颜色显示为渲染的颜色属性 任何帮助 将不胜感
  • 如何修复 Spring Boot 中的“嵌套异常是 java.lang.ArrayIndexOutOfBoundsException:索引 2 超出长度 2 的范围” - postgresql 项目

    我有一个带有 PostgreSQL 的 Spring Boot 项目 当我尝试从 UserController 执行 findAll 方法时 出现错误 您可以看到我的用户类和我返回的错误 它与查询有关 但我找不到它 我还使用扩展 JpaRe
  • Sphinx 是否在执行“make html”时运行我的代码?

    我继承了一个相当大的代码库 我想为其创建 HTML 文档 由于它是用 Python 编写的 我决定使用 Sphinx 因为代码的用户习惯于使用 Sphinx 创建的 Python 文档的设计和功能 我使用了命令sphinx apidoc自动
  • 仅从路线数据生成 URL

    我正在尝试在 ASP NET MVC 中做一些简单的事情 RouteValuesDictionary routeValues GetMyRouteData var url new UrlHelper Html ViewContext Req
  • 从动态 ModelForm 中删除字段

    在 ModelForm 中 我必须测试用户权限以让他们填写正确的字段 它的定义如下 class TitleForm ModelForm def init self user args kwargs super TitleForm self
  • 是否可以使用 EntityEntry.Reference 加载嵌套导航属性?

    以这些示例类为例 class TemplatePart public PartStock stock get set other POCOs class PartStock public Part part get set other PO
  • Chart.js - 多折线图 - 仅显示最后一个图表

    我正在使用 Chart js 在一页上显示多个折线图 然而 尽管我将它们称为 canvas1 和 canvas2 但只有最后一张图表显示 某处一定有什么冲突 我已经尝试了大多数事情 但没有任何快乐 这是两张图表 仅显示最后一张 图一
  • 为什么 getGenerateKeys() 返回“GENERATED_KEY”作为列名?

    我正在使用 JDBC MySQL 5 1 我创建了一个insert查询将一些数据插入表中并希望从新创建的行返回生成的键 但是 当我通过 id 引用列时 这是我的 PK 和自动增量列 PreparedStatement ps St0rm ge
  • SQL 错误:ORA-01861:文字与格式字符串 01861 不匹配

    我试图将数据插入现有表中并不断收到错误 INSERT INTO Patient PatientNo PatientFirstName PatientLastName PatientStreetAddress PatientTown Pati
  • 在 Swing 中设置 JComboBox 的背景 [重复]

    这个问题在这里已经有答案了 我想要一个没有箭头按钮 完成 的 JComboBox 启用时具有绿色背景 禁用时具有灰色背景 未完成 我还对下拉列表使用自定义渲染器 完成 我检查了BasicComboBoxUI的源代码并尝试重写一些方法 但没有
  • 从批处理脚本中的字符串中提取前导数字

    我是批处理脚本的新手 虽然我有针对这个问题的 shell 和 python 解决方案 但陷入了批处理脚本中 我有类似的字符串123 happy 234 healthy 3456wealthy etc 我想从每个字符串中提取前导数字 这里唯一
  • C++ 中的“标识符”什么时候是“名称”?

    在 C 中 什么时候 标识符 被称为 名称 我主要读到过度使用术语 名称 而不是 标识符 如示例所示 struct S int i S thing1 在这种情况下 是thing1 a name or 标识符 或者术语 标识符 和 名称 是否
  • 使用python压缩大文件

    我想用 python 压缩大文本文件 我说的是 gt 20Gb 文件 我不是专家 所以我尝试收集我发现的信息 以下似乎有效 import bz2 with open bigInputfile txt rb as input with bz2
  • 如何制作圆形表面视图

    我正在尝试制作圆形表面视图 我进行了很多搜索 但找不到好的解决方案 我现在正在做的是 我将 SurfaceView 放入 FrameLayout 中 然后将另一个 View 放在它上面 可以使用 PNG 掩码 也可以使用形状 xml 可绘制
  • 使用非 GNU awk 保存修改

    我遇到了一个问题 关于SO本身 其中OP必须对Input file本身进行编辑和保存操作 我知道对于单个 Input file 我们可以执行以下操作 awk print test here new line for saving Input
  • 使用显式参数调用函数与 call_user_func_array()

    本周早些时候我看到了一段代码 不幸的是 我无法检索 我很好奇作者是如何实现的 call 魔法方法 代码如下所示 class Sample protected function test var dump func get args publ
  • YamlDotNet - 需要反序列化器来忽略额外的节点或可以处理丢失的节点

    我正在尝试使用 YamlDotNet 来帮助我解析配置文件 我研究了它的文档并发现了两种方法 使用YamlStream的Load 方法 然后检查它创建的YamlDocument的节点 编写一系列相关类用于结果存储 然后使用 Deserial