List< t>反序列化c#
本文关键字:反序列化 List | 更新日期: 2023-09-27 17:50:48
我对c#比较陌生,我必须为工作编写一个相当大的应用程序。我想用反序列化填充xml文件中的项"Server"列表。我知道如何通过"硬编码"来做到这一点,但我认为反序列化将更容易和更清晰。
这是我的服务器类: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;
}
我在窗口构造函数中调用这个函数,然后抛出了一个异常:
类型为"System.Windows.Markup"的未处理异常。XamlParseException'发生在PresentationFramework.dll
附加信息:'调用类型'TestWPF的构造函数。与指定绑定约束匹配的主窗口抛出了异常。行号'3',行位'9'。
所以,我昨天一整天都在做这个,我真的很厌倦序列化,我想我找不到解决我的问题的方法。你能帮我一下吗?
假设您呼叫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;
}