基于XmlChoiceIdentifier创建对象

2023-12-11

我正在使用 Activator(C#) 动态创建对象,其中一个类如下所示:

class Driver
{
   Driver() { }

   [XmlChoiceIdentifier("ItemElementName")]
   [XmlElement("Bit16", typeof(DriverModule))]
   [XmlElement("Bit32", typeof(DriverModule))]
   [XmlElement("Bit64", typeof(DriverModule))]
   [XmlElement("Unified", typeof(DriverUnified))]
   public object Item { get; set; }
   [XmlIgnore]
   public ItemChoiceType ItemElementName { get; set; }

   // ... other serialization methods
}

当我使用 Activator 创建 Driver 类的实例时,我得到以下对象:

obj.Item = null;
obj.ItemElementName = "Bit16"

ItemElementName 是默认设置的,因为它是枚举,但是如果它基于此枚举,如何设置 Item? 再次,我使用 Activator 动态创建许多对象,因此我无法对其进行硬编码 - 是否可以在类中获取此信息并正确创建 Item 属性?

多谢!


ItemElementName被设定为ItemChoiceType.Bit16因为这是枚举中的第一项。因此它的值是0但你可以将其视为Bit16. By 活化剂您创建一个新实例。如果您不添加参数来设置属性,那么它们的值将是默认值。

我看到您有 XmlChoiceIdentifier 和其他 XmlSerializer 的东西。该属性的目的是:

  1. 不要序列化ItemElementName财产。
  2. 恢复ItemElementName根据序列化值进行反序列化后Item.

这就是我根据给定的信息可以告诉你的......

以下是使用 XmlSerializer 和 XmlChoiceIdentifier 的示例:

public class Choices
{
    [XmlChoiceIdentifier("ItemType")]
    [XmlElement("Text", Type = typeof(string))]
    [XmlElement("Integer", Type = typeof(int))]
    [XmlElement("LongText", Type = typeof(string))]
    public object Choice { get; set; }

    [XmlIgnore]
    public ItemChoiceType ItemType;
}

[XmlType(IncludeInSchema = false)]
public enum ItemChoiceType
{
    Text,
    Integer,
    LongText
}

class Program
{
    static void Main(string[] args)
    {
        Choices c1 = new Choices();
        c1.Choice = "very long text"; // You can put here a value of String or Int32.
        c1.ItemType = ItemChoiceType.LongText; // Set the value so that its type match the Choice type (Text or LongText due to type of value is string).

        var serializer = new XmlSerializer(typeof(Choices));
        using (var stream = new FileStream("Choices.xml", FileMode.Create))
            serializer.Serialize(stream, c1);

        // Produced xml file.
        // Notice:
        // 1. LongText as element name
        // 2. Choice value inside the element
        // 3. ItemType value is not stored
        /*
        <?xml version="1.0"?>
        <Choices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
          <LongText>very long text</LongText>
        </Choices>
        */

        Choices c2;
        using (var stream = new FileStream("Choices.xml", FileMode.Open))
            c2 = (Choices)serializer.Deserialize(stream);

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

基于XmlChoiceIdentifier创建对象 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 类型或命名空间“MyNamespace”不存在等

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

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 通过 DI 配置 Envers RevisionListener

    为了向我们的应用程序添加审计跟踪 我们决定使用 NHibernate Envers 为了允许应用程序特定的修订跟踪 DefaultRevisionEntity使用用户特定数据进行了扩展 public virtual void NewRevi
  • 神经网络不接受灰度图像

    我按照这个教程进行操作 https www pyimagesearch com 2017 09 11 object detection with deep learning and opencv 我更改了这部分 在将图像输入插入神经网络之前
  • 查找不在另一个表中的多个字段的记录

    假设我有 2 张桌子 tb1 tb2 具有以下模式 CREATE TABLE tb1 col1 INT NOT NULL col2 TEXT NOT NULL col3 TEXT NOT NULL col4 REAL 我如何查找记录tb1哪
  • 一旦任何一个进程在 python 中找到匹配项,如何让所有 pool.apply_async 进程停止

    我有以下代码 它利用多重处理来迭代一个大列表并找到匹配项 一旦在任何一个进程中找到匹配项 如何才能停止所有进程 我见过一些例子 但似乎没有一个适合我在这里所做的事情 usr bin env python3 5 import sys iter
  • 禁用整个应用程序的代理?

    自从升级到 Visual Studio 2010 以来 我遇到了一个问题 任何类型的第一个 Web 请求 WebRequest WebClient 等 在完成之前挂起大约 20 秒 随后的呼叫工作很快 我已将问题范围缩小到代理问题 如果我手
  • 是否可以在 Python 中访问 GetLongPathName() Win32 API?

    我需要将 8 3 约定中的路径转换为完整路径 在 Perl 中 我可以使用Win32 GetLongPathName 正如指出的如何使用 Perl 从 8 3 DOS 路径获取完整的 Win32 路径 但是 我需要用 Python 来做 U
  • jquery - 查找我引用的元素的名称

    在代码中 我在 Jquery 中引用了 DOM 元素 我怎么知道它的id 这可能违反直觉 但我需要知道这一点 以便我可以对另一个具有相似名称的元素进行一些操作 this attr id
  • 解构存在类型

    我使用存在类型作为包装器 在我的代码中 当我知道封闭类型时 我想用它做一些特定于封闭类型的事情 这是我能得到的最接近的 LANGUAGE ExistentialQuantification class Agent a where agent
  • 用特殊字符填充文本区域

    我正在使用用户之前的输入填充文本区域 这是从数据库中提取并设置为文本区域服务器端的内容 我们似乎遇到了拼写错误和特殊字符组合的问题 如果用户输入 6最初 当我尝试用它填充我的文本区域时 它只是呈现一个小正方形 就像它解释字符编码值一样 使用
  • 针对非类型参数的特定值的模板代码优化。

    template
  • 查找近似重复记录的技术

    我正在尝试清理一个数据库 多年来该数据库已获取许多重复记录 且名称略有不同 例如 在公司表中 有 Some Company Limited 和 SOME COMPANY LTD 之类的名称 我的计划是将有问题的表导出到 R 中 将名称转换为
  • 如何在命令行中使用 Robocopy 复制带时间戳的文件

    以下是我将计算机中的文件复制以及从计算机复制到网络的命令 ROBOCOPY K Builds F Builds E COPY DAT ROBOCOPY E K Shan Khan E COPY DAT 我怎么能在目标文件夹中创建时间戳仅在复
  • 如何使用txt文件作为命令行参数?

    我有一个像这样的 txt 文件 6 4 1 2 2 3 3 4 4 5 1 2 4 5 如何在 C 中使用它作为命令行参数 如果您打算提供您的程序数据program exe lt data txt 这就是所谓的从标准输入读取 您可以通过 N
  • 如何接收 OS X 中文件系统更改的通知?

    在 Windows 中 我可以使用 FindNextChangeNotification API 来监视文件或文件夹的更改 例如 我可以监视文件夹并在添加或删除文件时收到通知 OS X 上有类似的 API 吗 Mac OS X v10 5
  • BZIP2块标头:1AY&SY

    这是关于BZIP2的问题存档格式 任何BZIP2存档都由文件标头 一个或多个块和尾巴结构组成 所有块应从 1AY SY 开始 pi号的BCD编码数字为6个字节 0x314159265359 根据BZIP2的来源 A 6 byte block
  • VBA中MSSQL“走”的正确使用

    我即将运行一个使用 MSSQL 编写的批处理 如下所示 create function xy end go create function2 xy end go 然后 我将它保存在一个文件中 我的宏将其读入一个字符串并使用 ADO 尝试运行
  • Angular 2 Reactive Forms 仅从更改的控件中获取值

    我有一个包含所有输入的动态创建的表单 我正在订阅更改 但是当某个控件发生更改时 我会从所有控件中获取值 因此我真的不知道哪个控件发生了更改 是否可以使用 valueChanges 函数仅从更改的控件中获取更改的值 该表单非常大 因此将每个控
  • java中的复选框数组

    我想要 6 个复选框 并在按下按钮后执行一些操作 您有例子吗 还可以使用复选框数组吗 我想避免 Checkbox cb1 new Checkbox A Checkbox cb2 new Checkbox B 我正在做类似的事情 JPanel
  • 从另一个视图调用一个视图

    我有一个登录 phtml视图想要放置一个公共路径并让任何模块通过应用程序访问它 对于由以下方式渲染的侧边栏 this gt render common sidebar phtnl 它可以工作 因为我的布局对于所有模块都是单一的 但说到内容
  • 基于XmlChoiceIdentifier创建对象

    我正在使用 Activator C 动态创建对象 其中一个类如下所示 class Driver Driver XmlChoiceIdentifier ItemElementName XmlElement Bit16 typeof Drive