c# - 仅将 XML 反序列化为精确的类
问题描述
有没有办法强制 XML Deserialize 仅转换为完全匹配的类对象,如果不完全匹配则抛出异常(或错误)?
以下代码将成功导入所有 3 个 xml 文件:
using System.IO;
using System.Windows;
using System.Xml.Serialization;
namespace XmlDeserialize
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
Person data;
XmlSerializer xs = XmlSerializer.FromTypes(new[] { typeof(Person) })[0];
using (StreamReader reader = new StreamReader(Directory.GetCurrentDirectory() + "\\exact.xml"))
{
data = (Person)xs.Deserialize(reader);
}
using (StreamReader reader = new StreamReader(Directory.GetCurrentDirectory() + "\\reduced.xml"))
{
data = (Person)xs.Deserialize(reader);
}
using (StreamReader reader = new StreamReader(Directory.GetCurrentDirectory() + "\\extended.xml"))
{
data = (Person)xs.Deserialize(reader);
}
}
}
public class Person
{
public string Name;
public int Age;
}
}
确切的.xml
<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>MyName</Name>
<Age>9999</Age>
</Person>
exact.xml 完全适合,因此应该可以毫无问题地对其进行反序列化
减少的.xml
<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>MyName</Name>
</Person>
老实说,我预计使用reduce.xml会收到错误,但它会被反序列化而没有问题。我认为如果“Age”不可为空(int?)我将收到一个错误,而不是 int 的默认值。特别是当记住以下代码将导致编译器错误时。
int x;
MessageBox.Show("x: " + x); //Error: Use of unassigned local variable 'x'
因此,成功的反序列化对我来说很奇怪,但在某种程度上可以解释......
但我完全无法理解的是,使用以下 xml 文件时我没有收到错误:
扩展的.xml
<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>MyName</Name>
<Age>9999</Age>
<Address>MyAddress</Address>
</Person>
反序列化完全忽略了他无法将“地址”分配给任何类属性......
是否可以强制进行精确解析?对我来说最好的办法是使用reduce.xml 和extended.xml 收到错误,但至少在使用extended.xml 时我应该收到错误....
BR、MU
解决方案
推荐阅读
- reactjs - 如何将地图函数用于钩子 useState 属性
- python - Python configparser:获取未使用条目的列表
- html - 如何摆脱表格中的“红色区域”?
- mysql - 是否有 mysql 函数可以从 SCHEMA(date, time) 形式的可用数据中获取过去三天时间的平均值
- javascript - i 在 for 循环中的行为不是我所期望的
- python - 如何从字典中的列表(每个索引独立)写入条目列表?
- c - C中的反转字符串
- android - RecyclerView 在另一个具有相同布局管理器的 RecyclerView 内部不滚动
- hadoop - 当我们从 HDFS 将数据加载到 Hive 表中时,它会从源目录(HDFS)中删除文件
- sql - 如何在 SAP HANA DB 中列出当前用户的所有可选表