接口的 XML 序列化

2024-01-09

我需要序列化项目中的复杂对象并将它们放入数据库中。我想使用 XML 序列化它们,以便更轻松地调试我的应用程序。

我的情况与这篇文章中描述的非常相似:http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/16/how-to-serialize-an-interface-using-the-xmlserializer.aspx http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/16/how-to-serialize-an-interface-using-the-xmlserializer.aspx

所以我有一个包含属性的对象,该属性的类型由接口定义。然后我有不同的具体类型来实现它。

按照文章的方法,使用XmlInclude属性,我获得了一个强耦合的解决方案,但我的应用程序被构造为使用插件方法,因此我可以根据需要对接口进行多种实现。

有没有办法使用 xml 序列化来解决我的问题,或者我必须使用二进制序列化?


如果您想使用 XmlSerializer,您需要有一个基类,而不是一个接口。

XmlIninclude 只是告诉序列化器可能的实现的一种方法。 另一种方法是将包含的类型实际传递到序列化器中。

只需枚举应用程序中从基类派生的所有类型(使用反射),并将它们作为已知类型的数组传递到序列化器中:

var serializer = new XmlSerializer(myBaseType, arrayOfConcreteImplementations);

与使用 DataContractSerializer 完全相同:第二个参数是可以使用反射找到的已知类型的集合),但是使用它您可以支持接口...

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

接口的 XML 序列化 的相关文章

  • C++ 长 switch 语句还是用地图查找?

    在我的 C 应用程序中 我有一些值充当代表其他值的代码 为了翻译代码 我一直在争论使用 switch 语句还是 stl 映射 开关看起来像这样 int code int value switch code case 1 value 10 b
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • .NET 4 的条件编译[重复]

    这个问题在这里已经有答案了 可能的重复 条件编译和框架目标 https stackoverflow com questions 2923210 c sharp conditional compilation and framework ta
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl

随机推荐

  • Jinja2 过滤器将自定义标记转换为 html

    拥有自动转义属性 我想保持这种方式 我希望用户能够输入一些自定义标记 以便有机会格式化文本 例如 s s 将被翻译成 strong strong 我相信正确的方法是编写自定义 Jinja2 过滤器 但以下方法不起作用 app templat
  • 异步实际上是如何工作的......?

    我一直在研究大量的多线程 回调 调度队列 同步和异步方式 我研究得越多 得到的就越多困惑和沮丧以至于我觉得我似乎永远无法理解它 请有人能引导我朝着正确的方向开始 到目前为止我发现的大部分信息都是关于什么是做什么和优势的东西 我什么真正想知道
  • 将文本字符串解析为 F# 代码

    如何获取应该是 F 代码的文本字符串 并将其解析为 F 代码 以在屏幕上打印结果 我猜测这个问题可以通过 NET 中的一个功能来解决 因此可以通过 F 本身或 C 来完成 这可能以什么方式解决tryfsharp org http www t
  • Numpy 多维子集

    我花了很长时间努力寻找这个问题的答案 但没有找到任何完全符合要求的答案 我有一个多维 numpy 数组 其中包含数据 在我的例子中是 3 维 和另一个数组 2 维 其中包含有关我想要沿原始数组的最后一个维度的值的信息 例如 这是一个说明问题
  • 将路径保存在字符串中

    private static final String BasePath home rafael pesquisa ImageSimilarity 我正在开发一个图像比较程序 我从某处找到了这行代码 然而 在上述情况下 路径是为 Linux
  • POWERSHELL - 添加列 + 更新几行

    我是 PowerShell 新手 我目前正在尝试合并两个不同的 csv 一个有 7 列和 31 行 另一个有3列 大约10行 他们只有 PC 列是共同的 其余的我必须添加列 我尝试过几种操作 但没有成功 这是 powershell 控制台上
  • 如何在 C#winform 中向 ListView 添加列表项?

    我有一个对象列表 我想将这些项目添加到 ListView 中 我试图按行添加每个列表项 但格式非常糟糕 它应该采用正确的表类型格式 List
  • 有没有办法使用 JavaScript 获取当前时间(以纳秒为单位)?

    所以 我知道我可以使用 JavaScript 获取当前时间 以毫秒为单位 但是 是否有可能以纳秒为单位获取当前时间 使用以下方法在大多数浏览器中实现微秒级精度 window performance now 也可以看看 https devel
  • 如何访问异步获取函数的值? [复制]

    这个问题在这里已经有答案了 我想在另一个函数中使用获取的值 我对JS真的很陌生 所以直到现在我尝试了 this setState 和函数的返回值 async fetchData const url http localhost 8080 c
  • onCheckedChanged 多次触发,带有复选框的 Listview

    我有一个带有复选框的 ListView Oncheckedchanged 当用户选中 取消选中列表视图上的项目时调用 OncheckedChanged 当用户通过单击列表项时再次调用onItemClick 这是一个已知的问题 如何区分事件
  • 来自命令行的 ms 语音

    有没有办法从命令行使用 MS Speech 实用程序 我可以在 Mac 上执行此操作 但在 Windows XP 上找不到任何参考 我对这个主题的 2 美分 命令行俏皮话 在 Win 上使用PowerShell exe PowerShell
  • 嵌套类和 ADL

    这是代码 namespace Namespace struct L0 enum SomeEnum EnumVal struct L1 friend void f SomeEnum std cout lt lt f lt lt std end
  • Esc 键的作用类似于 html 中的重置按钮

    我有两个带有重置按钮和提交按钮的文本框 重置按钮工作正常 但是当我在这两个文本框中输入一些内容并按 esc 时 这些值就会消失 事件就像一个重置按钮 我不知道如何控制它 非常感谢您的帮助 谢谢
  • @SuppressLint 和 @TargetApi 哪个更好?

    我的应用程序存在以下问题StrictMode并添加了基本上禁用的代码片段StrictModeHelper 然而 林特抱怨setThreadPolicy 现在并建议添加 SuppressLint NewApi or TargetApi Bui
  • 如何从笔记本中查找jupyter笔记本的版本

    我希望从笔记本的单元格中返回 Jupyter Notebook 的版本 例如 要获取 python 版本 我运行 from platform import python version python version 或者获取 pandas
  • UnicodeDecodeError:“ascii”编解码器无法解码位置 304 中 0xc3 中的字节:序号不在范围内(128)

    我刚刚把电脑留在工作中 使用 Python 2 7 并有一个我刚刚完成的脚本 复制如下 它在工作中运行良好 我只想添加一两件事 但我回到家并使用 Mac 版本的 Python 3 2 2 并收到以下错误 Traceback most rec
  • 向 xcode 4 项目添加一个简单的库

    我知道这是一个非常简单的问题 但我已经为此苦苦挣扎了一段时间 我已经阅读了一些主题 但似乎仍然可以找到答案 我正在尝试添加这个DDMath解析器 https github com davedelong DDMathParser库到我现有的项
  • 有没有生成 3D 云的算法?

    所以我很想看到一种生成 3D 云对象的算法 尽可能现实 我知道有不同的云类型 https web archive org web 20130220071237 http www srh weather gov srh jetstream s
  • WPF 中的图像更新时发生 TargetInitationException

    我构建了一个显示图像的 WPF 控件 现在我想以非常快的速度改变这个形象 我构建了一个 ImageContainer 类 它保存图像并有一个 ChangedEventHandler 它在更改时更新我的 控件中的图像 执行的代码如下所示 vi
  • 接口的 XML 序列化

    我需要序列化项目中的复杂对象并将它们放入数据库中 我想使用 XML 序列化它们 以便更轻松地调试我的应用程序 我的情况与这篇文章中描述的非常相似 http geekswithblogs net SoftwareDoneRight archi