我已序列化List<Server> servers
。
服务器类有以下变量:
public class Server
{
string serverName { get; set; }
string dnsIP { get; set; }
Game game { get; set; }
和游戏类:
public class Game
{
public enum Genre { FPS, RTS, RPG, MMO, MOBA, TPS, Sandbox, Other };
private string gameName { get; set; }
private Genre genre { get; set; }
当我尝试像这样序列化时:
private void saveServersToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "XML files (*.xml)|*.xml";
saveFileDialog.InitialDirectory = ".";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
Stream myStream = null;
if ((myStream = saveFileDialog.OpenFile()) != null)
{
var serializer = new XmlSerializer(typeof(List<Server>));
serializer.Serialize(myStream, Arrays.servers);
myStream.Close();
}
saveFileDialog.Dispose();
}
}
我得到了这样的XML文件:
<?xml version="1.0"?>
<ArrayOfServer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Server />
<Server />
</ArrayOfServer>
如何获取serverName,dnsIP,gameName,genre等所有信息。
答案 0 :(得分:2)
公开你的财产。 Serializer需要能够读取您的属性,否则它不知道如何序列化对象。
public class Server
{
public string serverName { get; set; }
public string dnsIP { get; set; }
public Game game { get; set; }
}
public class Game
{
public enum Genre { FPS, RTS, RPG, MMO, MOBA, TPS, Sandbox, Other };
public string gameName { get; set; }
public Genre genre { get; set; }
}
如果您有理由将这些属性设为私有,您还可以使用IXmlSerializable接口并覆盖GetSchema,ReadXml和WriteXml方法以访问您的私有属性。但是,如果你这样做,你将失去xml序列化程序的所有易用性。
您可以在MSDN http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx
上阅读有关IXmlSerializable界面的更多信息答案 1 :(得分:1)
您的Server
课程没有公共属性,只有内部属性 - XmlSerializer仅适用于公共属性/字段。
XML序列化是将对象的公共属性和字段转换为串行格式(在本例中为XML)以进行存储或传输的过程。
如果您需要使用字段,我建议您切换到DataContractSerializer,在这方面它会更灵活。
但是,如果不是这种情况,您只需更新字段即可拥有public
访问修饰符,即
public class Server
{
public string serverName { get; set; }
...
}