列出<t>反序列化c#</t>

时间:2014-03-18 09:23:30

标签: c# xml serialization

我对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真的很无聊,我想我找不到解决问题的办法。你能帮我吗?

谢谢!

1 个答案:

答案 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;
}