我对C#比较陌生,我要为一个非常大的应用程序编写代码。我想从xml文件中填充“服务器”项列表,并使用反序列化。我知道如何通过“硬编码”来做到这一点,但我认为反序列化将更容易和更清洁。
所以:这是我的服务器类:
public class Server
{
[XmlElement(ElementName = "Name")]
public int Name { get; set; }
[XmlElement(ElementName = "URL")]
public int URL { get; set; }
}
我的XML文件(数据仅用于测试)
<?xml version="1.0" encoding="utf-8" ?>
<ServersList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Servers>
<Server>
<Name>Tata</Name>
<URL>goulf</URL>
</Server>
<Server>
<Name>test2</Name>
<URL>http://test</URL>
</Server>
</Servers>
</ServersList>
和我用于反序列化的代码(我使用了stackoverflow和其他网站上的示例,但它不起作用)
public List<T> ReadServersList<T>()
{
XmlSerializer xmlSer = new XmlSerializer(typeof(List<T>), new XmlRootAttribute("ServersList"));
TextReader stringReader = new StringReader(xmlPath);
List<T> b = (List<T>)xmlSer.Deserialize(stringReader);
stringReader.Close();
return b;
}
我在窗口构造函数中调用此函数,并抛出异常:
PresentationFramework.dll中出现未处理的“System.Windows.Markup.XamlParseException”类型异常
附加信息:'在类型'TestWPF.MainWindow'上调用与指定绑定约束匹配的构造函数引发了异常。行号“3”和行位置“9”。
所以,我昨天整天都在这里工作,我对Serialzation真的很无聊,我想我找不到解决问题的办法。你能帮我吗?
谢谢!
答案 0 :(得分:0)
假设您正在呼叫ReadServersList<ServersList>()
您可能需要
class ServersList
{
[XmlElement(ElementName = "Servers")]
Server [] Servers;
}
然后该方法看起来像
public ServersList ReadServersList()
{
XmlSerializer xmlSer = new XmlSerializer(typeof(ServersList), new XmlRootAttribute("ServersList"));
TextReader stringReader = new StringReader(xmlPath);
ServersList b = (ServersList)xmlSer.Deserialize(stringReader);
stringReader.Close();
return b;
}