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
相关产品推荐
相关产品推荐

