【问题标题】:Creating XML structure using xml attributes使用 xml 属性创建 XML 结构
【发布时间】:2016-10-21 06:01:34
【问题描述】:

我正在尝试用 xml 属性解决一个难题。问题是我们已经有了这种结构的广泛使用的文件,我不能偏离它

<CONFIGS>
  <CONFIG>
    <NAME>c1</NAME>
    <DB>
      <VAL1>v1</VAL1>
      <VAL2>v2</VAL2>
      <VAL3>v3</VAL3>
    </DB>
  </CONFIG>
  <CONFIG>
    <NAME>c2</NAME>
    <DB>
      <VAL1>v1</VAL1>
      <VAL2>v2</VAL2>
      <VAL3>v3</VAL3>
    </DB>
  </CONFIG>
</CONFIGS>

我已经创建了这个 c# 代码

// master class
[XmlRoot(ElementName = "CONFIGS")]
public class MyConfigs
{

    [XmlArrayItem(ElementName = "CONFIG", Type = typeof(MyConfigSchema))]
    public MyConfigSchema[] Schemas { get; set; }
}

// I should have array of these
public class MyConfigSchema
{

    [XmlElement(DataType = "string", ElementName = "NAME")]
    public string Name { get; set; }

    [XmlElement(ElementName = "DB", Type = typeof(Db))]
    public Db Config { get; set; }

    // this element is single and has subelements
    public class Db
    {

        [XmlElement(DataType = "string", ElementName = "VAL1")]
        public string Val1 { get; set; }

        [XmlElement(DataType = "int", ElementName = "VAL2")]
        public int Val2 { get; set; }

        [XmlElement(DataType = "string", ElementName = "VAL3")]
        public string Val3 { get; set; }

    }
}

// Writing 
using (var writer = new FileStream(testfile, FileMode.Create))
        {
            var ser = new XmlSerializer(typeof(MyConfigs));
            ser.Serialize(writer, confFileObj);
            writer.Close();
        }

这是我的问题 - 它写入以下输出,这几乎是我需要的,但其中写入了我无法拥有的 &lt;Schemas&gt;. . . &lt;/Schemas&gt;

<CONFIGS> --<Schemas>-- <CONFIG> <NAME>c1</NAME> <DB> <VAL1>v1</VAL1> <VAL2>v2</VAL2> <VAL3>v3</VAL3> </DB> </CONFIG> <CONFIG> <NAME>c2</NAME> <DB> <VAL1>v1</VAL1> <VAL2>v2</VAL2> <VAL3>v3</VAL3> </DB> </CONFIG> --</Schemas>-- </CONFIGS>

有没有办法摆脱&lt;Schemas&gt;. . . &lt;/Schemas&gt;

【问题讨论】:

    标签: c# xml xml-serialization


    【解决方案1】:

    看起来我刚刚解决了它。我以前从未见过这个,在 MSDN 上看过,因此我没有尝试过。但我尝试了而不是这个

    [XmlArrayItem(ElementName = "CONFIG", Type = typeof(MyConfigSchema))]
    public MyConfigSchema[] Schemas { get; set; }
    

    这样做

    [XmlElement(ElementName = "CONFIG", Type = typeof(MyConfigSchema))]
    public MyConfigSchema[] Schemas { get; set; }
    

    我放置了XmlElement 而不是XmlArrayItem,它起作用了。我不知道可以用普通元素属性标记列表或数组。

    【讨论】:

      猜你喜欢
      • 2022-10-18
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多