反序列化 xml,包括命名空间

2024-02-06

我正在尝试反序列化一些 XML,但无法获取名称空间 /xsi:type="Model"上班。如果xsi:type="Model"被排除在 XML 之外,它可以工作,但它必须存在。如果我将命名空间保留在模型之外,则会收到错误,如果重命名它,则会得到一个空列表。

XML

<Vehicles xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Vehicle xsi:type="Model">
        <Id>238614402</Id>
    </Vehicle>
    <Vehicle xsi:type="Model">
        <Id>238614805</Id>
    </Vehicle>
</Vehicles>

Model

[XmlRootAttribute("Vehicles")]
public class Vehicles
{
    public Vehicles() 
    {
        Vehicle = new List<Vehicle>();
    }

    [XmlElement(ElementName = "Vehicle", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
    public List<Vehicle> Vehicle { get; set; }
}


public class Vehicle
{
    [XmlElement("Id")]
    public int Id { get; set; }

}

反序列化

XmlSerializer serializer = new XmlSerializer(typeof(Vehicles));
string carXML = "<Vehicles xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Vehicle  xsi:type=\"Model\"> <Id>238614402</Id> </Vehicle><Vehicle  xsi:type=\"Model\"> <Id>238614805</Id> </Vehicle></Vehicles>";

var cars = (Vehicles)serializer.Deserialize(new StringReader(carXML));

上面的例子返回一个空列表,因为命名空间是错误的,据我所知 - 如何让它返回一个实际的列表?

EDIT我对 XML 没有任何控制权,我是从不同的提供商那里获得的,所以我必须相应地更改其余的代码。


请尝试这个:

public partial class Vehicles
{
    [XmlElement("Vehicle")]
    public Vehicle[] Vehicle { get; set; }
}

[XmlInclude(typeof(Model))]
public partial class Vehicle
{
    public uint Id { get; set; }
}

public class Model : Vehicle { }

注意类型vehicle.

var xs = new XmlSerializer(typeof(Vehicles));
Vehicles vehicles;

using (var fs = new FileStream("file.xml", FileMode.Open))
{
    vehicles = (Vehicles)xs.Deserialize(fs);
}

foreach (var vehicle in vehicles.Vehicle)
{
    Console.WriteLine(vehicle.GetType()); // Model
    Console.WriteLine(vehicle.Id);
}

无需指定命名空间。序列化属性时xsi将自动添加实际类型Model.

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

反序列化 xml,包括命名空间 的相关文章

  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 扩展 XSD 文件

    我有一个带有枚举类型的 XSD 文件 我想创建一个 扩展 XSD 文件 它添加一些额外的枚举 但其他方面的行为就像主 XSD 一样 例如 主 XSD 文件包含以下内容
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 已编译的查询和“参数不能是序列”

    我认为编译的查询将执行与 DataContext 相同的查询转换 然而 当我尝试使用带有 Contains 方法调用的查询时 出现运行时错误 我哪里出错了 private member which holds a compiled quer
  • 发送大量UDP数据包时如何减少系统调用开销? (Windows 和 Linux)

    例如 我在 Windows 上发送 100000 个 UDP 数据包 对于每个数据包 我需要调用WSASendTo 一次 所以可能会引入很多系统调用开销 有没有办法进行批量发送并减少这种开销 我在谷歌搜索了一段时间后找不到适用于 Windo
  • 如何在android中像没有微调器的微调器一样弹出列表?

    我的活动中有一个微调器小部件 可让用户选择列表名称 通常 微调器的功能是在列表之间切换 但对于几个实例 我交换了选择更改侦听器以使用相同的选项列表执行不同的功能 一旦做出选择 老听众就会恢复 生活继续 这是一个糟糕且有问题的安排 相反 我想
  • 使用 connect by 子句递归插入

    我在表中有分层数据 右 按照以下方式创建层次结构 如左所示 表保存在 oracle 11g 中 TREE Hierarchy Tree Table Element Parent P0 P0 P1 P1 P0 P11 P2 P0 C111 P
  • 在 C 中执行简单 MPI 程序时集群挂起/显示错误

    我正在尝试运行一个简单的 MPI 程序 多个数组加法 它在我的 PC 中完美运行 但只是挂起或在集群中显示以下错误 我正在使用 open mpi 和以下命令来执行 集群网络配置 主节点1 MASTER eth0 Link encap Eth
  • 如何在 VB.net 中让函数运行回调

    恐怕我一直在谷歌搜索这个 但找不到我理解或可以使用的答案 在 Javascript 中 您可以运行一个函数并设置一个回调函数 该函数在第一个函数运行后调用 function doThis callBack do things do thin
  • gulp 和 karma,文件 karma.conf.js 不存在

    我有一个基本的 AngularJS 应用程序 希望让我的所有终端命令都通过 gulp 任务运行 例如 gulp dev对于开发服务器和 gulp unitTest用于测试等 我已经按照文档安装了 Gulp npm install save
  • 将驱动器号转换为分区 ID/磁盘 ID

    给定驱动器盘符 我如何获得OSImage安装到分区ID http technet microsoft com en us library ff716430 aspx and Disk ID http technet microsoft co
  • BCC 发送 PHP mail() 到邮件列表的方式与 TO 不同吗?

    我正在改进 PHP 邮件列表代码 使用mail 在循环中迭代所有订阅者 该脚本用于显示 超出最大执行时间 30 秒 错误 我通过添加解决了该错误set time limit 0 现在没有错误 但发送 100 条消息花了大约七分钟 我有什么选
  • 如何了解System.Windows.Forms.dll中System.InvalidOperationException的详细信息?

    运行我的应用程序时 我在 Visual Studio 的 输出 面板中发现了下面的异常日志 System Windows Forms dll 中发生 System InvalidOperationException 类型的第一次机会异常 该
  • 动态像素化 html 图像元素

    我要在网页上拍摄图像 然后使用 javascript 或最适合的任何内容 对其进行动态 像素化 例如 变成 20px 的正方形 然后 当用户向下滚动页面时 我需要图像的分辨率逐渐增加 直到它不再像素化 我有什么想法可以去做这件事吗 我意识到
  • PayPal Express Checkout 集成响应

    我目前很难理解我的 PayPal EC 集成的响应 GetExpressCheckoutDetails 响应是 CHECKOUTSTATUS gt PaymentActionNotInitiated 但在 DoExpressCheckout
  • WPF设计问题(自定义控件或mvvm)

    这是场景 我有一个显示一些数据的视觉效果 The data to the visual can come in one of two ways 通过用户通过键盘或鼠标输入 通过一些后端源 Both these data inputs can
  • WooCommerce 上的购物车总重量和运输重新计算

    我正在尝试使用一个片段将我的自定义盒子重量添加到总订单重量中 目前工作正常 但是 不会根据重新计算的片段重量重新计算运输方式 有什么想法如何强制重新计算运费吗 add filter woocommerce cart contents wei
  • 完全删除 MySQL 5.7 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在尝试从 ubuntu 12 04 中完全卸载 mysql 但没能做到 我尝试了很多命令 但没有任何作用 任何人都可以帮忙吗 sudo apt g
  • 用于对基于时间的值进行排序的 Redis 数据结构设计

    我正在对数据流执行一些分析并将结果发布到 Redis 通道上 消费者订阅这些频道并获取实时数据源 所有历史数据分析结果都会丢失 现在我想添加在Redis中存储历史数据的能力 以便消费者可以查询这些历史数据 主要是按时间 由于分析结果按时间分
  • 如何在一项任务中执行多个 gulp 命令

    我很难理解如何在单个任务中处理多个 gulp 源 在这样的任务中 gulp task task1 function cb gulp src src js pipe gulp dest dist gulp src src css pipe g
  • 如何将 Linux shell 脚本编译为独立的可执行文件*二进制*(即不仅仅是 chmod 755)?

    我正在寻找一个免费的开源工具集 可以编译各种 经典 脚本语言 例如Korn Shell ksh csh bash 等作为可执行文件 如果脚本调用其他程序或可执行文件 则将它们包含在单个可执行文件中 Reasons 混淆交付给客户的代码 以免
  • 快速修复/n 错误:MsgSeqNum 太高

    我已经使用 QuickFIX n is v1 4 0 从此 创建了一个修复应用程序 http www quickfixn org download http www quickfixn org download 地点 当我执行应用程序时 我
  • 反序列化 xml,包括命名空间

    我正在尝试反序列化一些 XML 但无法获取名称空间 xsi type Model 上班 如果xsi type Model 被排除在 XML 之外 它可以工作 但它必须存在 如果我将命名空间保留在模型之外 则会收到错误 如果重命名它 则会得到