在可序列化的 C# 类上使用不带 XmlArray 的 XmlArrayItem 属性

2024-03-16

我想要以下格式的 XML:

<configuration><!-- Only one configuration node -->
  <logging>...</logging><!-- Only one logging node -->
  <credentials>...</credentials><!-- One or more credentials nodes -->
  <credentials>...</credentials>
</configuration>

我正在尝试创建一个类Configuration具有[Serializable]属性。为了序列化凭证节点,我有以下内容:

[XmlArray("configuration")]
[XmlArrayItem("credentials", typeof(CredentialsSection))]
public List<CredentialsSection> Credentials { get; set; }

但是,当我将其序列化为 XML 时,XML 的格式如下:

<configuration>
  <logging>...</logging>
  <configuration><!-- Don't want credentials nodes nested in a second
                      configuration node -->
    <credentials>...</credentials>
    <credentials>...</credentials>
  </configuration>
</configuration>

如果我删除[XmlArray("configuration")]行,我得到以下信息:

<configuration>
  <logging>...</logging>
  <Credentials><!-- Don't want credentials nodes nested in Credentials node -->
    <credentials>...</credentials>
    <credentials>...</credentials>
  </Credentials>
</configuration>

我怎样才能以我想要的方式序列化这个,有多个<credentials>单个根节点内的节点<configuration>?我想做到这一点而无需实施IXmlSerializable并进行自定义序列化。我的班级是这样描述的:

[Serializable]
[XmlRoot("configuration")]
public class Configuration : IEquatable<Configuration>

以下内容应该按照您想要的方式正确序列化。线索是[XmlElement("credentials")]在名单上。我通过获取您的 xml,在 Visual Studio 中从中生成架构 (xsd) 来完成此操作。然后在架构上运行 xsd.exe 以生成一个类。 (以及一些小的修改)

public class CredentialsSection
{
    public string Username { get; set; }
    public string Password { get; set; }
}

[XmlRoot(Namespace = "", IsNullable = false)]
public class configuration
{
    /// <remarks/>
    public string logging { get; set; }

    /// <remarks/>
    [XmlElement("credentials")]
    public List<CredentialsSection> credentials { get; set; }

    public string Serialize()
    {
        var credentialsSection = new CredentialsSection {Username = "a", Password = "b"};
        this.credentials = new List<CredentialsSection> {credentialsSection, credentialsSection};
        this.logging = "log this";
        XmlSerializer s = new XmlSerializer(this.GetType());
        StringBuilder sb = new StringBuilder();
        TextWriter w = new StringWriter(sb);
        s.Serialize(w, this);
        w.Flush();
        return sb.ToString();
    }
}

给出以下输出

<?xml version="1.0" encoding="utf-16"?>
<configuration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <logging>log this</logging>
  <credentials>
    <Username>a</Username>
    <Password>b</Password>
  </credentials>
  <credentials>
    <Username>a</Username>
    <Password>b</Password>
  </credentials>
</configuration>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在可序列化的 C# 类上使用不带 XmlArray 的 XmlArrayItem 属性 的相关文章

随机推荐

  • 使用curl将工件包上传到sonatype:500服务器错误

    我想上传一个工件包 jar 到https oss sonatype org https oss sonatype org与curl命令 curl verbose user SONATYPE USER SONATYPE PASSWORD fo
  • useContext React JS 延迟

    在我的 React 应用程序中 当用户登录时 会生成一个令牌 JWT 然后将其存储在 LocalStorage 中 一切完成后 为了维护不同路由的用户登录 我使用 useContext 我想在用户登录时显示注销按钮 实际上它会出现 但 2
  • 检测 WebView 内的可用内存

    我正在构建一个应用程序 其中包含WebView运行一些 JavaScript 代码 JavaScript 代码的分配量很大 可能需要大量内存 有时 所需的内存量超出了 JavaScript 所需的内存量 导致 WebView 的 Chrom
  • mysql_connect():标头和客户端库次要版本不匹配库:100005

    自从上周五执行定期包更新以来 我的网络服务器遇到了一个相当棘手的问题 我在使用 mysql connect 时遇到错误 Warning mysql connect Headers and client library minor versi
  • 精确定位 magento 1.6.2 中两个页面之间的差异和更改

    我有两个页面应该使用完全相同的模板和布局 正确的项目布局如下所示 http dokha co index php medwakh custom medwakh from white horse studios 13 html http do
  • 处理大量数据的WCF服务的最佳实践?

    我们有一个 WCF 服务 用于查询底层数据存储 现在是 SQL Server 2005 该服务可能会返回相当大量的数据 我们的实体类有 60000 多个实例 其中包含约 20 个属性 这些属性大多是基元 例如 string int Date
  • 将 azure 应用程序服务/网站限制为域

    我有一个在 azure 应用程序服务上运行的 WCF 服务 我想将此 WCF 限制为一些天蓝色网站 外部 IP 和一些其他部署 我在 WCF web config 中使用 IPSecurity 标记 我的问题是 IP 限制有效 但我允许访问
  • warp 如何与原子操作一起工作?

    warp 中的线程在物理上并行运行 因此如果其中一个 称为线程 X 启动原子操作 其他线程会做什么 等待 这是否意味着 当线程 X 被推入原子队列时 所有线程都将等待 获得访问权限 互斥体 并对受该互斥体保护的内存执行一些操作 然后再释放互
  • 定义日期格式 java 'rd' 'st' 'th' 'nd'

    我有一个字符串 星期六 10 月 25 日 11 40 这个日期有什么格式 我怎样才能解析序数指示符 http en m wikipedia org wiki Ordinal indicator 这是我想要的转换方式 private Str
  • Java 8 中的方法参考

    public class Car private int maxSpeed public Car int maxSpeed this maxSpeed maxSpeed public int getMaxSpeed return maxSp
  • WPF C# 应用程序运行 2-3 次就会冻结我的整个计算机

    我在这个问题上放了很多信息 因为我不知道什么是相关的 Issue 我遇到一个问题 我正在开发的程序在运行时会冻结我的整个计算机并且不返回任何错误 我完全无法执行任何 CTRL ALT DEL 甚至不起作用的操作 该程序接受来自 Androi
  • 用 C++ 扩展 PHP?

    我有一个用 PHP 编写的性能密集型例程 我想将其移植到 C 以提高性能 有没有办法使用 C 编写插件或扩展或其他东西并从 PHP 与之交互 无需手动编辑实际的 PHP 源代码 As 莱姆斯 说 https stackoverflow co
  • 将 object_setInstanceVariable() 转换为 ARC?

    我希望转换一个实例 object setInstanceVariable self key UTF8String id addr 到 ARC 当我尝试使用 Xcode 内置 Objective C ARC 转换器时 出现以下错误 objec
  • 闭包和通用量化

    我一直在尝试研究如何在 Scala 中实现 Church encoded 数据类型 看起来它需要 n 级类型 因为你需要一个一流的const类型函数forAll a a gt forAll b b gt b 然而 我能够这样对对进行编码 i
  • 如何在 Visual Studio 中选择性地抑制标记验证?

    有时我发现能够抑制包含 HTML ASPX 等 的文件中的某些标记验证警告很有用 是否有相当于 pragma warning disable restore对于 HTML 周围也有类似的问题 参见this https stackoverfl
  • python - 将字符串中的日期与今天的日期进行比较

    客观的 将字符串中的日期与今天的日期进行比较 Issue 收到此错误 ValueError 未转换的数据仍然存在 12 00 00 问题 如何修复该错误 如何删除字符串的时间元素 Code from datetime import date
  • 无法使用 Dapper.NET 将文件流插入 SQL 文件表

    我在我的项目中使用 Dapper NET 作为 ORM 层 我正在尝试编写用于文件上传和下载的WebApis 但是我无法让它工作 我已经进行了足够的搜索来寻求帮助 但我找不到任何帮助 如果我只是使用 ADO NET 我可以使用 VarBin
  • python:pandas:如何根据另一列分组查找列中的最大值

    我想根据一列 SERVER 对数据帧进行分组 然后在其他列 JOB ID 中找到最大值 DF SERVER JOB ID LOG FILE TIME 0 abc 123 1 1 abc 123 dep2 1 123 log 2019 12
  • 如何将按钮与引导程序中的行/列的底部对齐?

    我有 4 列的行 每列都有一个标题和一些文本 大多数列都有相似数量的文本 向下按列中的按钮以匹配其余列 然而 一列的文本较少 并且按钮按下得不够远 有没有办法将按钮与行底部对齐 我想实现这一点并同时保持响应 因此当屏幕较小时它看起来像这样
  • 在可序列化的 C# 类上使用不带 XmlArray 的 XmlArrayItem 属性

    我想要以下格式的 XML