0

我正在尝试将 ObservableCollection 的代码序列化为 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)
    {

    }
}
4

1 回答 1

0

这样,您尝试序列化 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);
    }
于 2013-10-18T18:38:32.940 回答