You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# XML序列化不符合预期:如何移除ConnectionConfig节点?

解决方案

要保留ConnectionConfig类的同时让XML直接输出<instance>节点,只需在Config类的ConnectionConfig属性上添加**[XmlArray("")]和[XmlArrayItem("instance")]**两个特性,同时调整ConnectionConfig类的特性配置即可:

修改后的C#类代码

public class Config
{
    [XmlArray("")] // 空字符串表示不生成ConnectionConfig外层节点
    [XmlArrayItem("instance")] // 指定子元素的XML节点名称为instance
    public ConnectionConfig ConnectionConfig { get; set; }
    [XmlAttribute(AttributeName="advanced")]
    public bool AdvancedEnabled { get; set; }
}

public class ConnectionConfig
{
    // 移除原XmlElement特性,避免和XmlArrayItem冲突
    public List<InstanceConfig> Instances { get; set; }
}

public class InstanceConfig
{
    [XmlText]
    public string Uri { get; set; }
    [XmlAttribute(AttributeName="username")]
    public string Username { get; set; }
    [XmlAttribute(AttributeName="password")]
    public string Password { get; set; }
}

原理说明

  • [XmlArray("")]:告知XML序列化器,该属性对应的集合不需要生成外层容器节点,直接去掉了原来的<ConnectionConfig>标签。
  • [XmlArrayItem("instance")]:指定集合内每个元素序列化后的XML节点名称为<instance>,替代默认的类型名称。
  • 移除ConnectionConfig类中Instances属性的[XmlElement]特性,避免和XmlArrayItem的配置冲突。

序列化后生成的XML

<config advanced="false">
    <instance username="user1" password="123">http://localhost:1234</instance>
    <instance username="user2" password="1234">http://localhost:1235</instance>
    <instance username="user3" password="12345">http://localhost:1236</instance>
</config>

内容的提问来源于stack exchange,提问作者bergungsdackel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:55:16