我正在为我管理的程序编写一个管家应用程序,在尝试将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>
...
如您所见,OfficerCode
,TelephoneNumber
和EmailAddress
参数未被导出。我能看到的唯一区别是这些变量没有{ set; }
因为我希望它们在初始化Object之后是只读的但是我不明白为什么会影响XmlSerializer
的能够读取数据并将其输出到XML。我做错了什么?