反序列化 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,包括命名空间 的相关文章

随机推荐

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

    我认为编译的查询将执行与 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 之外 它可以工作 但它必须存在 如果我将命名空间保留在模型之外 则会收到错误 如果重命名它 则会得到