用xml填充静态类

时间:2014-02-21 13:44:58

标签: c# xml

我有一个名称空间Common.Param,其中我创建了一堆简单的静态字符串类,如下所示:

public class Url
{
    public static string LoginPage;
    public static string AdminPage;
    public static string ProfilePage;
}

public class LoginDetails
{
    public static string Username;
    public static string Password;
}

我想用这样的xml文件填充这些字段

<Param>
  <Url>
    <LoginPage>http://1.2.3.4/Login.aspx</LoginPage>
    <AdminPage>http://1.2.3.4/Admin.aspx</AdminPage>
    <ProfilePage>http://1.2.3.4/Profile.aspx</ProfilePage>
  </Url>
  <LoginDetails>
    <Username>myUser</Username>
    <Password>p4ssw0rd</Password>
  </LoginDetails>
...
</Param>

如何找到Common.Param命名空间中的所有类并以编程方式填充其字符串?

2 个答案:

答案 0 :(得分:3)

当然你可以这样做:

var xdoc = XDocument.Load(path_to_xml);
var url = xdoc.Root.Element("Url");
Url.LoginPage = (string)url.Element("LoginPage");
Url.AdminPage = (string)url.Element("AdminPage");
Url.ProfilePage = (string)url.Element("ProfilePage");
var login = xdoc.Root.Element("LoginDetails");
LoginDetails.Username = (string)login.Element("Username");
LoginDetails.Password = (string)login.Element("Password");

但正如@Tarion正确指出的那样,我会选择非静态数据。静态数据引入了与系统的耦合。此外,您将无法对静态数据使用xml序列化。

因此,xml中的元素名称与类的成员匹配,然后反序列化将非常简单。只需创建包含ParamUrl的<{1}}类:

LoginDetails

反序列化:

public class Param
{
    public Url Url { get; set; }
    public LoginDetails LoginDetails { get; set; }
}

public class Url
{
    public string LoginPage { get; set; }
    public string AdminPage { get; set; }
    public string ProfilePage { get; set; }
}

public class LoginDetails
{
    public string Username { get; set; }
    public string Password { get; set; }
}

答案 1 :(得分:1)

您正在寻找的一般事项是“序列化”/“反序列化”。

有很多非常称职的图书馆。试试看这里