序列化定义开放元素的可观察集合
本文关键字:观察 集合 元素 定义 序列化 | 更新日期: 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);
}