首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果找不到元素,在C#中使用XmlSerializer反序列化会失败吗?

如果找不到元素,在C#中使用XmlSerializer反序列化会失败吗?
EN

Stack Overflow用户
提问于 2008-11-03 11:56:10
回答 3查看 13.6K关注 0票数 15

我正在使用XmlSerializer在C#中写入和读取对象。我目前使用属性XmlElementXmlIgnore来操作对象的序列化。

如果我的xml文件缺少我需要的xml元素,我的对象仍然可以很好地反序列化(xml ->对象)。如何指示(最好是通过属性)某个字段是“必需的”?

下面是我当前使用的示例方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[XmlElement(ElementName="numberOfWidgets")]
public int NumberThatIsRequired {
    set ...;
    get ...;
}

我理想的解决方案是添加一个类似于XmlRequired属性的东西。

另外,对于哪些属性可用于操作XmlSerializer的行为,有没有很好的参考资料?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-11-03 11:58:49

对于第二部分,我有一个答案:"Attributes that control XML serialization"

仍在调查第一部分...

编辑:我强烈怀疑您不能通过XML反序列化本身来做到这一点。我刚刚在一个示例模式上运行了xsd.exe,该模式包含一个必需的属性-如果该属性被标记为可选,则它完全相同。如果有一种方法需要设置属性,我希望在这种情况下实现它。

我怀疑你基本上只需要在反序列化之后验证你的对象树。很抱歉..。

票数 5
EN

Stack Overflow用户

发布于 2008-11-03 13:10:23

我找到的唯一方法就是通过XSD。你能做的就是在反序列化的同时进行验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static T Deserialize<T>(string xml, XmlSchemaSet schemas)
{
    //List<XmlSchemaException> exceptions = new List<XmlSchemaException>();
    ValidationEventHandler validationHandler = (s, e) =>
    {
        //you could alternatively catch all the exceptions
        //exceptions.Add(e.Exception);
        throw e.Exception;
    };

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.Schemas.Add(schemas);
    settings.ValidationType = ValidationType.Schema;
    settings.ValidationEventHandler += validationHandler;

    XmlSerializer serializer = new XmlSerializer(typeof(T));
    using (StringReader sr = new StringReader(xml))
        using (XmlReader books = XmlReader.Create(sr, settings))
           return (T)serializer.Deserialize(books);
}
票数 16
EN

Stack Overflow用户

发布于 2008-11-03 21:10:25

出于可扩展性的原因,XmlSerializer在进行反序列化时非常宽容;像[DefaultValue]ShouldSerialize{Foo}{Foo}Specified这样的东西主要在序列化期间使用(例外是{Foo}Specified,它是在反序列化期间设置的,并且在序列化期间被查询)。

因此,没有一种简单的方法可以做到这一点,除非您实现了IXmlSerializable并亲自动手。Richard显示了xsd选项,这也是一个选项。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/259726

复制
相关文章
C++中符号优先级问题
转载自:https://blog.csdn.net/lfb_2048/article/details/62040608
种花家的奋斗兔
2020/11/13
6190
mold源码阅读五 符号相关
上期讲完了resolve_section_pieces,在这之后本应是combine_object,但是combine_object几乎包含了后面的所有过程,因此等到整个流程讲完后或许会再回来讲,这一期的内容以符号版本的处理为主。
AkemiHomura
2023/05/03
3200
mold源码阅读 其三 符号决议
前面两期将读取输入的部分全部讲完了,本期开始涉及链接过程中的处理。在讲主要的符号决议之前,先讲一下mold在符号决议执行之前做的一些其他处理。
AkemiHomura
2023/04/12
3760
【陆勤阅读】探索机器学习中的数据科学
原文作者:原微软技术与研究部门合伙人数据科学架构师Mario Garzia 译者:杜红光 数据科学与“大数据”已经成为21世纪高科技产业的流行语。而“大数据”这个术语,在很多情况下是相对于我们收集、存储和处理数据的能力来说的。有关大数据的挑战并非新生事物,历史上也曾出现过一些著名的大数据使用案例。一个有趣的例子是美国人口普查, 1880年进行的美国人口普查,耗时8年才完成了全部的数据汇总。同时,由于人口膨胀的原因,当时人们预计完成1890年的人口普查要10年以上的时间。这就是当时的一个大数据问题。随后一
陆勤_数据人网
2018/02/26
5960
【陆勤阅读】探索机器学习中的数据科学
【陆勤阅读】数据科学
“用数据来研究科学,科学的研究数据” “数据科学将逐渐达到与其他自然科学分庭抗礼的地位” ——作者 数据科学主要包括两个方面:用数据的方法来研究科学和用科学的方法来研究数据。前者包括像生物信息学、天体信息学、数字地球等领域。后者包括统计学、机器学习、数据挖掘、数据库等领域。这些学科都是数据科学的重要组成部分。但只有把它们有机地放在一起,才能形成整个科学的全貌。 在数据科学领域里工作的人才需要具备两方面的素质:一是概念性的,主要是对模型的理解和运用;二是实践性的,主要是处理实际数据的能力。培养这样的人
陆勤_数据人网
2018/02/26
7580
【陆勤阅读】数据科学
C++ 中有符号类型到无符号类型的转换
为了更好地解释下面的代码,先来介绍一些背景知识,在我的计算机中, char 类型占 8 个比特位,那么, unsigned char 类型能表示的数的范围为 0 ~ 2的8次方 - 1,即 0 ~ 255,共 256 个数;int 类型占 32 个比特位,那么 unsigned 类型所能表示的数的范围为 0 ~ 2的32次方 - 1,即 0 ~ 4294967295,共 4294967296 个数,接下来看下面的代码:
用户7886150
2021/02/15
1.4K0
Docker为何未在生产环境中取得广泛成功?
Docker的发展势头一天比一天强劲,它显然在试图解决实际的问题。然而,对如今许多的生产环境用户来说,没有出现优点压倒缺点的局面。在开发、测试和持续性集成等环境下,Docker在让容器吸引广大开发人员方面确实有上佳的表现,不过它还没有颠覆生产环境。按照DockerCon 2015的“生产环境下的Docker”这一主题,我想公开讨论Docker想在生产环境使用场合下得到广泛采用还没有克服的种种挑战。这里提到的问题没有一个是新问题,它们都以某种形式出现在GitHub上。大多数问题我已经在大会演讲中或与Docke
静一
2018/03/23
1.4K0
mold源码阅读九 未解析符号的处理
本期内容主要是claim_unresolved_symbols的部分,其次是其他一些简单的处理
AkemiHomura
2023/10/22
2150
C++解析一些特殊符号tab、换行符号
我们经常会遇到一些Linux内核信息需要,比如一个wifi数据,中间是用tab键盘隔开的,然后每一行用换行符进行区分,如下所示的数据
良知犹存
2021/05/12
9920
C++解析一些特殊符号tab、换行符号
C++鲜为人知的符号
这些鲜为人知的C++符号,可直接在代码中使用,但实践中不推荐这么做,可作为茶余饭后的乐趣了解C++的另一面。
一见
2018/08/10
3070
c++ 常量表达式_c++符号常量
常量表达式主要是允许一些计算发生在编译时,即发生在代码编译阶段而不是代码运行阶段。这是很大的优化,因为如果有些事情可以在编译时做,那么它只会做一次,而不是每次程序运行时都计算。 使用constexpr,你可以创建一个编译时的函数:
全栈程序员站长
2022/11/10
3080
Python中的符号
1.算数运算符 2.复合赋值运算符 3.常用的格式符号
py3study
2020/01/10
2.7K0
FPGA设计中 有符号数、无符号数
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
FPGA技术江湖
2020/12/29
1.7K0
FPGA设计中 有符号数、无符号数
LaTeX求和符号_matlab中求和符号怎么表示
Latex的求和公式: 若想输出 ∑ i = 0 n \sum_{i=0}^n i=0∑n​ 则需要输入:
全栈程序员站长
2022/11/18
2.3K0
jQuery中$符号的实质
其实就是一个函数,以后用的时候,记得跟小括号 参数不同,功能就不同。3种用法: 参数是一个function, 入口函数 $(function () { }); $(domobj) 把dom对象转换成jquery对象 $(document).ready(function () { }); 参数是一个字符串,用来找对象 $("div") $("div ul") $(".current") 案例:检测$符号类型 <!DOCTYPE html> <html lang="zh-CN"> <h
兮动人
2021/06/11
3.7K0
jQuery中$符号的实质
Excel中$符号的妙用
Excel 使用过程中,不知道你有没有用到过 $ ,如果从来都没有用到过,可能代表你的修为还不够深,来看看为什么这么说。
披头
2019/12/26
2K0
Linux中符号的用法
用;号隔开每个命令, 每个命令按照从左到右的顺序,顺序执行, 彼此之间不关心是否失败, 所有命令都会执行。
头皮阴都都
2020/04/23
3.4K0
C++之Error无法解析的外部符号[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/153486.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/13
3K0
如何看懂常用原理图符号、如何阅读原理图
原理图是我们设计,构建和排除电路故障的地图。了解如何阅读和遵循原理图是任何电子工程师的重要技能。
不脱发的程序猿
2021/01/20
4K0
latex中求和符号正下方的符号怎么打_累加符号上下标的意义
放在左上角的时候 \sum^n: ∑ n \sum^n ∑n 放在正上方的时候 \sum\limits^n: ∑ n \sum\limits^n ∑n​
全栈程序员站长
2022/11/07
4.4K0

相似问题

什么是KEYVAL?它的目的是什么?

12

什么是JAF?它的目的是什么?

30

这个for循环是如何工作的?它的目的是什么?

40

什么是xcscheme文件?它的目的是什么?

10

什么是双关语,它的目的是什么?

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文