C# - 使用泛型方法将对象列表序列化为XML

时间:2017-11-07 15:27:32

标签: c# xml serialization

我正在为我管理的程序编写一个管家应用程序,在尝试将List自定义类序列化为XML文件时,我遇到了一些障碍。

I found this SO question使用XMLSerializer类将对象数据输出到XML。与我正在尝试做的主要区别在于我有一些包含唯一数据的不同列表,因此我使用通用静态方法构建了一个辅助类来序列化/反序列化数据。问题是并非所有数据都被序列化,因此我不能在以后将其反序列化回我的应用程序而不会遇到问题。

我的方法如下:

private static void SerializeObjectToXml<T>(List<T> inputList, string filePath)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(List<T>));
            using (FileStream stream = new FileStream(filePath, FileMode.Create))
            {
                serializer.Serialize(stream, inputList);
            }
        }

我的数据对象如下所示:

[XmlRoot("NameAddress")]
    public class AppNameAddress
    {
        private string _OfficerCode;
        private string _TelephoneNumber;
        private string _EmailAddress;

        public string OfficerCode { get { return _OfficerCode; } }
        public string TelephoneNumber { get { return _TelephoneNumber; } }
        public string EmailAddress { get { return _EmailAddress; } }
        public string TeamName = "";
        public bool IsOfficerManager = false;

        public AppNameAddress() { }

        public AppNameAddress(Dictionary<string, object> data)
        {
            _OfficerCode = data["OfficerCode"].ToString().Trim();
            _TelephoneNumber = data["TelephoneNo1"].ToString().Trim();
            _EmailAddress = data["EmailAddress"].ToString().Trim();
        }
    }

我的List声明如下:

[XmlArray("NamesAddresses"), XmlArrayItem(typeof(AppNameAddress), ElementName = "NameAddress")]
        public static List<AppNameAddress> NamesAddresses;

问题是导出到XML文件的数据如下所示:

<?xml version="1.0"?>
<ArrayOfAppNameAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <AppNameAddress>
    <TeamName />
    <IsOfficerManager>false</IsOfficerManager>
  </AppNameAddress>
  <AppNameAddress>
    <TeamName />
    <IsOfficerManager>false</IsOfficerManager>
  </AppNameAddress>
...

如您所见,OfficerCodeTelephoneNumberEmailAddress参数未被导出。我能看到的唯一区别是这些变量没有{ set; }因为我希望它们在初始化Object之后是只读的但是我不明白为什么会影响XmlSerializer的能够读取数据并将其输出到XML。我做错了什么?

0 个答案:

没有答案