序列化定义开放元素的可观察集合

本文关键字:观察 集合 元素 定义 序列化 | 更新日期: 2023-09-27 18:36:08

我正在尝试将可观察代码集合序列化为XML文件。 当我这样做时,生成的 XML 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfCode xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Code>
    <AccpacCode>ORWC</AccpacCode>
    <LAC>94199999999999999</LAC>
    <SCSCode>WC</SCSCode>
  </Code>
  <Code>
    <AccpacCode>AK9999</AccpacCode>
    <LAC>90299999999999999</LAC>
    <SCSCode>UI</SCSCode>
    <ParentEmployerAccpacCode>AKSUTA</ParentEmployerAccpacCode>
  </Code>
  <Code>
    <AccpacCode>AL0014</AccpacCode>
    <LAC>90107307000999999</LAC>
    <SCSCode>IT</SCSCode>
  </Code>
  <Code>
    <AccpacCode>IN0006</AccpacCode>
    <LAC>91817599999999999</LAC>
    <SCSCode>IT</SCSCode>
  </Code>

这一切都很好,除了我需要标签Codes代替ArrayOfCode。 如何指定标签名称?

下面是代码模型:

namespace SerializeObservableCollection.Model
{
    [Serializable()]
    public class Codes
    {
        public Codes() { }
        [XmlElement("Code")]
        public ObservableCollection<Code> CodeCollection { get; set; }
    }
    [Serializable()]
    public class Code
    {
        [XmlElement("AccpacCode")]
        public string AccpacCode { get; set; }
        [XmlElement("LAC")]
        public string LAC { get; set; }
        [XmlElement("SCSCode")]
        public string SCSCode { get; set; }
        [XmlElement("ParentEmployerAccpacCode")]
        public string ParentEmployerAccpacCode { get; set; }
    }
}

下面是执行序列化的代码:

private void SaveToXML()
{
    try
    {
        XmlSerializer _serializer = new XmlSerializer(typeof(ObservableCollection<Code>));
        using (StreamWriter _writer = new StreamWriter(@"LocalCodes.xml"))
        {
            _serializer.Serialize(_writer, CodeCollection);
        }
    }
    catch (Exception ex)
    {
    }
}

序列化定义开放元素的可观察集合

这样,您正在尝试序列化类型为 ObservableCollection 的对象,很快您将无法控制 xml 标记中显示的名称。您需要另一个名为 Codes 的类,该类具有包含此集合的属性和带有参数 Code 的 XmlElement 属性。

    var codes = new Codes { CodeCollection = codeCollection };
    XmlSerializer _serializer = new XmlSerializer(typeof(Codes));
    using (StreamWriter _writer = new StreamWriter(@"LocalCodes.xml"))
    {
        _serializer.Serialize(_writer, codes);
    }