反序列化期间未知元素将被忽略

2023-11-24

当我使用 XmlTextReader 反序列化 XML 文档时,没有相应类的文本元素将被简单地忽略。

Note:这是not关于 XML 中缺少的元素,这些元素需要存在,而是存在于 XML 文本中,而在代码中没有等效属性。

我本希望得到一个异常,因为如果运行时数据中缺少相应的元素并且我稍后对其进行序列化,则生成的 XML 文档将与原始文档不同。因此忽略它是不安全的(在我的实际情况中,我只是忘记定义给定文档包含的 99 个以上类之一,而且我一开始没有注意到)。

那么这是否正常?如果是,为什么?如果元素无法序列化,我可以以某种方式请求我想要获得异常吗?

在下面的 XML 示例中,我故意拼错了“MyComandElement”以说明核心问题:

<MyRootElement>
    <MyComandElement/>
</MyRootElement>

MyRootElement.cs:

public class CommandElement {};

public class MyRootElement
{
    public CommandElement MyCommandElement {get; set;}
}

反序列化:

XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyRootElement));
XmlTextReader xmlReader = new XmlTextReader(@"pgtest.xml");
MyRootElement mbs2 = (MyRootElement)xmlSerializer.Deserialize(xmlReader);
xmlReader.Close();

正如我在进一步研究中偶然发现的那样,这个问题实际上非常容易解决,因为......

...XmlSerializer 支持事件!所要做的就是为缺失元素定义一个事件处理程序

void Serializer_UnknownElement(object sender, XmlElementEventArgs e)
{
    throw new Exception("Unknown element "+e.Element.Name+" found in "
        +e.ObjectBeingDeserialized.ToString()+" in line "
        +e.LineNumber+" at position "+e.LinePosition);
}

并使用 XmlSerializer 注册事件:

xmlSerializer.UnknownElement += Serializer_UnknownElement;

该主题被处理在MSDN,其中人们还了解到

默认情况下,调用 Deserialize 方法后,XmlSerializer 会忽略未知类型的 XML 属性。

毫不奇怪,还有丢失属性、节点和对象的事件。

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

反序列化期间未知元素将被忽略 的相关文章

  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 为什么 XML 中的 CDATA 语法看起来如此奇怪?

    CDATA 在 XML 中的使用如下
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • Asp.net会员授权无需密码

    要对 Asp net 会员资格中的用户进行身份验证 我们可以调用方法 FormsAuthentication Authenticate username password 我怎样才能在没有用户密码的情况下完成同样的工作 生成会话 cooki
  • Microsoft.NET.Sdk.Worker 与 API 项目兼容吗?

    通过以下方式创建的 Visual Studio API 项目 新项目 ASP NET Core Web 应用程序 ASP NET Core Web API 结果是一个以 开头的项目文件
  • getApplicationContext()、getBaseContext()、getApplication()、getParent()

    有什么区别 getApplicationContext getBasecontext getApplication getParent 您能用一个简单的例子来详细说明吗 获取应用程序上下文 应用程序上下文与应用程序相关联 并且在整个生命周期
  • 在 Android 应用中使用 Firebase (BaaS) 存储电子邮件和密码时,如何包含用户名?

    火力基地createUser 方法需要一个电子邮件和密码字段 但如果我还想允许用户使用类似于 Snapchat Instagram StackOverflow 等的自定义用户名怎么办 有没有办法修改现有方法以接受该字段 或者我是否需要手动推
  • 为什么 Python 无法识别我的 utf-8 编码源文件?

    这是一个带有非 ASCII 字符的小 tmp py if name main s print s 运行它我收到以下错误 Traceback most recent call last File tmp py line 3 in
  • 在 plpython3u 过程中导入 Python 包时出现“找不到模块”

    我正在使用一个plpython3存储的函数 在postgres数据库上MacOS 与标准企业数据库包一起安装 我可以导入标准 python 包 例如 CREATE OR REPLACE FUNCTION foo x double preci
  • 仅将一条记录标记为默认的约束

    如何在表上设置约束 以便只有一条记录具有其isDefault位字段设置为 1 约束不是表范围 而是由 FormID 指定的每组行的一个默认值 使用唯一的过滤索引 在 SQL Server 2008 或更高版本上 您可以简单地使用唯一过滤索引
  • 在 Elasticsearch 插件中读取文件

    我正在编写一个 elasticsearch 插件 它依赖于从磁盘上的文件读取数据 当我尝试在代码中访问此文件时 出现以下异常 Caused by java security AccessControlException access den
  • Spring Boot 拦截所有异常处理程序

    我正在尝试执行一些适用于我所有的通用逻辑 ExceptionHandler代码中 我知道我可以写一个HandlerInterceptor拦截快乐路径 但我想挂钩异常处理生命周期 以便可以在呈现错误响应之前执行一些常见逻辑 例如日志记录 无论
  • CPP + 正则表达式验证 URL

    我想在 c MFC 中构建一个正则表达式来验证 URL 正则表达式必须满足以下条件 有效网址 http cu 241 dell tech co in MyWebSite ISAPIWEBSITE Denypage aspx http www
  • Android Contentprovider - 在插入方法中更新

    可以打电话吗SQLiteDatabase更新方法在insert 内容提供者的重写方法 基本上没问题 但由于你没有提供代码 我只能发布两种可能的方法 First In your content provider public Uri inse
  • 如何重置字典中的所有值

    green 0 y3 1 m tt 0 newaccount 0 egg 0 results 0 dan 0 Lewis 0 NewAccount2 0 testyear3 1 testyear6 0 NewAccount1 0 testy
  • 如何设置TextInputLayout错误消息颜色?

    如何更改可设置为显示在文本字段下方的错误消息的颜色TextInputLayout via setError 在这里查看错误状态 它通常显示为红色 我想改变它 我应该在我的项目中使用哪些项目名称 键styles xml文件来定位颜色 Edit
  • 使用 Jenkins 从机器 B 运行机器 A 的构建

    我有 2 台电脑 Com A Com B 我在 Com A 上使用 selenium webdriver Testng 和 maven 构建自动化功能脚本 Com A 已经安装了 Jenkins 的所有内容 但 Com B 只有 jenki
  • 避免 WordPress 插件上的 jquery 冲突的防弹方法

    我开发 WordPress 插件已经有一段时间了 我的所有插件似乎总是遇到以下问题 Jquery 冲突问题 我尝试了很多不同的方法来避免这些问题 但我总是让用户联系我说 当他们安装了我的一个插件时 它已经阻止了另一个插件的工作aahhhhh
  • 使用 swift 在图像上覆盖文本

    我正在尝试使用 Swift 在图像上覆盖一些文本 并在此处查看此代码 src 如何在 iOS Swift 中向图像添加文本 这会将文本置于正中央 我一直在改变价值观 var rect CGRectMake 10 150 inImage si
  • 如何获取android中停止服务的意图

    我在用stopService 停止服务 我想发送额外的数据意图 如何在服务中检索这些额外数据 据我所知 这个Intent未交付至Service以任何方式 代替stopService 您可以使用startService 传递您的额外内容 并在
  • 将新节点添加到现有 XmlDocument 对象

    我有一个以下格式的 xml
  • 玩!框架 - 视图未编译?

    我创建了一个新项目并使用 eclipse 使用eclipsify命令 基本上 我移动了app目录从旧项目到我创建的新项目 问题是 eclipse 无法识别这些视图 我收到如下错误 views html viewTopic 无法解析为类型 我
  • 反序列化期间未知元素将被忽略

    当我使用 XmlTextReader 反序列化 XML 文档时 没有相应类的文本元素将被简单地忽略 Note 这是not关于 XML 中缺少的元素 这些元素需要存在 而是存在于 XML 文本中 而在代码中没有等效属性 我本希望得到一个异常