使用 XmlSerializer 序列化名称值对数组而不包含节点

发布于 2024-12-20 06:26:38 字数 659 浏览 1 评论 0原文

我有这个类...

[XmlRoot("config")]
public class SourceConfig
{
    public string Description { get; set; }

    public string HelpLink { get; set; }
}

...我将其序列化到这个...

<config>
  <Description />
  <HelpLink />
  <param name="param1" value="" />
  <param name="param2" value="" />
</config>

...使用 XmlSerializer + 使用 XmlDocument 进行后处理来添加 < ;param> 元素。

是否有更好的方法来序列化 元素,而无需使用 XmlDocument 进行后处理?

我尝试使用 XmlArray 属性,但 元素最终位于另一个节点内。

I have this class...

[XmlRoot("config")]
public class SourceConfig
{
    public string Description { get; set; }

    public string HelpLink { get; set; }
}

...which I serialize into this...

<config>
  <Description />
  <HelpLink />
  <param name="param1" value="" />
  <param name="param2" value="" />
</config>

...using XmlSerializer + post-process using XmlDocument to add the <param> elements.

Is there a better way to serialize the <param> elements without post-processing using XmlDocument?

I tried using XmlArray attribute but the <param> elements ended up inside another node.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

李白 2024-12-27 06:26:38

使其成为 XmlElement:

[XmlRoot("config")]
public class SourceConfig
{
    public string Description { get; set; }

    public string HelpLink { get; set; }

    [XmlElement("param")]
    public List<Params> param { get; set; }
}

完整工作示例:

[XmlRoot("config")]
public class SourceConfig
{
   public SourceConfig() {
      Description = String.Empty;
      HelpLink = String.Empty;
      Parameters = new List<ParamDetails>(); 
   }

   public string Description { get; set; }
   public string HelpLink { get; set; }
   [XmlElement("param")]
   public List<ParamDetails> Parameters { get; set; }
}

public class ParamDetails {
   [XmlAttribute("name")]
   public string name;
   [XmlAttribute("value")]
   public string value;
}

static class Program {
   static void Main() {
      XmlSerializer ser1 = new XmlSerializer(typeof(SourceConfig));
      SourceConfig list1 = new SourceConfig();
      list1.Description = "Test Desc";
      list1.HelpLink = String.Empty;
      list1.Parameters.Add(new ParamDetails { name = "param1", value = "1" });
      list1.Parameters.Add(new ParamDetails { name = "param2", value = "2" });
      ser1.Serialize(Console.Out, list1);
   }
}

输出以下内容:

<?xml version="1.0" encoding="IBM437"?>
<config 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Description>Test Desc</Description>
  <HelpLink />
  <param name="param1" value="1" />
  <param name="param2" value="2" />
</config>

Make it an XmlElement:

[XmlRoot("config")]
public class SourceConfig
{
    public string Description { get; set; }

    public string HelpLink { get; set; }

    [XmlElement("param")]
    public List<Params> param { get; set; }
}

Complete working example:

[XmlRoot("config")]
public class SourceConfig
{
   public SourceConfig() {
      Description = String.Empty;
      HelpLink = String.Empty;
      Parameters = new List<ParamDetails>(); 
   }

   public string Description { get; set; }
   public string HelpLink { get; set; }
   [XmlElement("param")]
   public List<ParamDetails> Parameters { get; set; }
}

public class ParamDetails {
   [XmlAttribute("name")]
   public string name;
   [XmlAttribute("value")]
   public string value;
}

static class Program {
   static void Main() {
      XmlSerializer ser1 = new XmlSerializer(typeof(SourceConfig));
      SourceConfig list1 = new SourceConfig();
      list1.Description = "Test Desc";
      list1.HelpLink = String.Empty;
      list1.Parameters.Add(new ParamDetails { name = "param1", value = "1" });
      list1.Parameters.Add(new ParamDetails { name = "param2", value = "2" });
      ser1.Serialize(Console.Out, list1);
   }
}

Outputs the following:

<?xml version="1.0" encoding="IBM437"?>
<config 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Description>Test Desc</Description>
  <HelpLink />
  <param name="param1" value="1" />
  <param name="param2" value="2" />
</config>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文