如何通过 Xml 属性重命名类名?

2024-04-09

假设我有一个名为的 XML 可序列化类Song:

[Serializable]
class Song
{
    public string Artist;
    public string SongTitle;
}

为了节省空间(也半混淆XML 文件),我决定重命名 xml 元素:

[XmlRoot("g")]
class Song
{
    [XmlElement("a")]
    public string Artist;
    [XmlElement("s")]
    public string SongTitle;
}

这将产生如下 XML 输出:

<Song>
  <a>Britney Spears</a>
  <s>I Did It Again</s>
</Song>

我也想重命名/重新映射类/对象的名称。假设,在上面的示例中,我希望重命名该类Song to g。因此生成的 xml 应该如下所示:

<g>
  <a>Britney Spears</a>
  <s>I Did It Again</s>
</g>

是否可以重命名类名通过 xml 属性?

我不想手动创建/遍历 DOM,所以我想知道是否可以通过装饰器来实现。

我实际上正在序列化 XML 中的 Song 对象列表。

这是序列化代码:

    public static bool SaveSongs(List<Song> songs)
    {
            XmlSerializer serializer = new XmlSerializer(typeof(List<Song>));
            using (TextWriter textWriter = new StreamWriter("filename"))
            {
                serializer.Serialize(textWriter, songs);
            }
    }

这是 XML 输出:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfSong>
<Song>
  <a>Britney Spears</a>
  <s>Oops! I Did It Again</s>
</Song>
<Song>
  <a>Rihanna</a>
  <s>A Girl Like Me</s>
</Song>
</ArrayOfSong>

显然,XmlRoot()属性不会重命名列表上下文中的对象。

我错过了什么吗?


解决方案:使用[XmlType(TypeName="g")]

XmlRoot 仅适用于 XMLroot nodes根据文档(以及您所期望的,鉴于其名称包括root)!

我无法得到任何其他工作答案,所以继续挖掘......

相反,我发现XmlType属性 (i.e. [XmlType])及其TypeName财产做类似的工作non-root类/对象。

e.g.

[XmlType(TypeName="g")]
class Song
{
    public string Artist;
    public string SongTitle;
}

假设您将其应用于其他类,例如:

[XmlType(TypeName="a")]
class Artist
{
    .....
}

[XmlType(TypeName="s")]
class SongTitle
{
    .....
}

这将输出以下内容完全按照问题的要求:

<g>
  <a>Britney Spears</a>
  <s>I Did It Again</s>
</g>

我已经在几个生产项目中使用过它,没有发现任何问题。

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

如何通过 Xml 属性重命名类名? 的相关文章

  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 当我单击 C# 中的“取消”按钮时重定向到新页面(Web 部分)

    Cancel button tc new TableCell btnCancel new Button btnCancel Text Cancel btnCancel Click new EventHandler btnCanel Clic
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • std::bind 重载解析

    下面的代码工作正常 include
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 滚动条通过 CSS 动画/过渡出现

    我正在用 Angular 来动画我的 ng view三次贝塞尔曲线过渡 Animations slide animation ng enter slide animation ng leave webkit transition all c
  • 双指针与引用指针传递[重复]

    这个问题在这里已经有答案了 在理解双指针概念以及应该在哪里使用它的同时 我有一个疑问 我试验了这段代码 发现我也可以使用按引用传递指针而不是双指针 include
  • MySQL:使用 PREPARE 命令命名参数?

    MySQL 中是否可以使用PREPARE命令与命名参数例如PDO in PHP 这是我的例子 SET s SELECT FROM MY TABLE WHERE my column 1 AND my column 2 PREPARE stmt
  • 如何删除 Google Play 排行榜高分

    我刚刚发布了我的游戏 我看到测试的高分仍然作为高分出现 如何删除它 重置排行榜 在游戏中加载排行榜或成就 在右上角单击设置 共享 断开连接 带有复选框 同时删除谷歌中的所有活动 它将删除您的所有分数
  • 如何通过 PHP 调用 CITRIX (LogMeIn) API 来注册新的 GotoWebinar 与会者?

    我使用以下代码将用户注册到网络研讨会 headers array HTTP 1 1 Accept application json Accept application vnd citrix g2wapi v1 1 json Content
  • 为什么这个onload函数没有运行?

    为什么onLoad没有被触发 function FULL IMAGE fimage document getElementById FULL SRC onLoad function offsetTop document getElement
  • 获取几何长度

    有谁知道获取 WPF 几何图形长度 以像素为单位 的有效方法 我知道 WPF 中的几何图形是基于矢量的 因此实际上没有像素长度 但必须能够根据可见的绘制图像获得长度 我的意思是 如果我在 1024x800 像素图像中绘制一些几何图形 则必须
  • 从表中选择随机单词

    假设我有以下基本 MySQL 数据 CREATE TABLE my words my word VARCHAR 255 INSERT INTO my words VALUES dog INSERT INTO my words VALUES
  • System.IO 找不到通过 subst-command 生成的路径

    context 系统有一个硬盘和一个驱动器 C 所需路径位于 F eventlogging 我做了什么 我执行了 subst cmd 以生成 F 驱动器 来自 C 添加了目录 eventlogging 问题 在代码中 有一些部分写入 F e
  • .NET 4.0 框架与 .NET 1.1 位于同一服务器上

    这些框架版本可以在同一台服务器上正常运行吗 这意味着 IIS 可以支持两个应用程序池 其中一个池配置为 NET 4 0 另一个池配置为 NET 1 1 编辑 这个问题与 IIS 7 有关 是的 您可以在同一个 IIS 实例中运行 1 1 2
  • 在 WKInterfaceLabel 内滚动长文本?

    简单的问题 有没有办法制作WKInterfaceLabel如果文本太长而无法适应标签框架 则滚动 类似于UITextView 你绝对可以做到这一点 您需要做的就是设置以下属性WKInterfaceLabel在故事板中 标签 gt 线 0 W
  • Fortran 读取混合字符串和数字数据

    我在读取语句时遇到问题 我更喜欢 Fortran90 尽管如果有帮助的话其他版本也是可能的 我的文件中有一堆数据行 可以描述为 以空格分隔 没有固定的格式 包含一个字符串 后跟 7 个数字 字符串包含正斜杠 这是一个例子 maxele OS
  • 如何防止(卸载)TypeScript 安装并引用它自己的 @types 到 AppData\Local 中

    我遇到了一个有点令人困惑的问题 似乎TypeScript正在安装自己的副本React进入它自己的全局缓存 不确定它叫什么 假设那就是它是什么 并在我的项目中引用它 具体来说 我最终得到了两个对 React 的引用 其中一个位于我的项目的根目
  • 在maven 2中的命令行上设置插件的属性

    在 maven 2 x 中 如何在命令行上而不是在 pom 或 settings xml 中该插件的 中设置插件的属性 例如 如果我正在使用mvn dependency copy dependencies 在这里看到 http maven
  • 循环系统发育树上的节点标签

    我正在尝试创建循环系统发育树 我有这部分代码 fit lt hclust dist Data 4 method complete members NULL nclus 3 color c red blue green color list
  • Asp.net core 中的条件依赖解析

    我有 2 个控制器 PayerController 和 BusinessController 两个 Controller 构造函数都将 EntityManager 作为参数 它是一个抽象类 我想根据我正在使用的控制器来解析每个管理器类 对于
  • 使用 javascript 将 png 上传到 imgur

    我正在尝试使用Javascript上传一个png to imgur http imgur com 我直接使用了 Imgur API 中的代码example http api imgur com examples 但我认为我没有正确传递 pn
  • Linux内核将写入管道的数据保存在哪里

    假设有以下简单代码 include
  • 包含任何文本的元素的量角器预期条件

    有没有办法检查元素中是否有任何文本 我已经找到了textToBePresentInElement但此函数会检查指定值 如果失败则不会返回正确的错误 我通过 API 填充该元素 并且稍后加载它 因此我希望浏览器等到元素中出现任何信息 然后检查
  • 如何通过 Xml 属性重命名类名?

    假设我有一个名为的 XML 可序列化类Song Serializable class Song public string Artist public string SongTitle 为了节省空间 也半混淆XML 文件 我决定重命名 xm