在XML存储自定义应用程序设置 [英] Store custom application settings in XML

查看:116
本文介绍了在XML存储自定义应用程序设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请帮忙。我有这个code,这是我的课连载\反序列化应用程序设置。

  [XmlRoot(EvaStartupData)
[可序列化]
公共类MyConfigClass
{
    公共字符串服务器名{获得;组; }
    公共字符串数据库{获得;组; }
    公共字符串用户名{获得;组; }
    公共字符串用户登陆{获得;组; }


    公共静态无效MyConfigLoad()
    {
        FileInfo的F1 =新的FileInfo(myConfigFileName);
        如果(fi.Exists)
        {
            XmlSerializer的mySerializer =新的XmlSerializer(myConfigClass.GetType());
            StreamReader的myXmlReader =新的StreamReader(myConfigFileName);
            尝试
            {

                myConfigClass =(MyConfigClass)mySerializer.Deserialize(myXmlReader);
                myXmlReader.Close();
            }
            赶上(例外五)
            {
                的MessageBox.show(ОшибкасериализацииMyConfigLoad \ N+ e.Message);
            }

            最后
            {
                myXmlReader.Dispose();
            }
        }
    }

    公共静态无效MyConfigSave()
    {
        XmlSerializer的mySerializer =新的XmlSerializer(myConfigClass.GetType());
        StreamWriter的myXmlWriter =新的StreamWriter(myConfigFileName);
        尝试
        {
            mySerializer.Serialize(myXmlWriter,myConfigClass);
        }
        赶上(例外五)
        {
            的MessageBox.show(ОшибкасериализацииMyConfigSave \ N+ e.Message);
        }

        最后
        {
            myXmlWriter.Dispose();
        }
    }

}
 

系列化给予的我简单的XML结构:

 <服务器> navuhodonoser< /服务器名>
<数据库>矩阵LT; /数据库>
<用户名>史密斯先生< /用户名>
<用户登陆>新< /用户登陆>
 

我必须

如何修改我的类来获取这个XML结构:

 <连接服务器名称=navuhodonoser数据库=矩阵......>
 

解决方案

默认情况下,XmlSerializer的序列化将所有公共属性的元素;覆盖,你需要标记每个属性与 [XmlAttribute] (从System.Xml.Serialization命名空间),这会给你所需的输出。

例如:

  [XmlAttribute]
公共字符串服务器名{获得;组; }

[XmlAttribute]
公共字符串数据库{获得;组; }

[的XmlElement]
公共字符串用户名{获得;组; }

//注:无属性
公共字符串用户登陆{获得;组; }
 

会产生类似:

 < XML服务器名称=值数据库=值>
    <用户名>值小于/用户名> <! - 请注意,用户名被标记的XmlElement,它匹配的默认行为 - >
    <用户登陆>值小于/用户登陆>
< / XML>
 

please help. I have this code, it's my class to serialize\deserialize application settings.

[XmlRoot("EvaStartupData")]
[Serializable] 
public class MyConfigClass
{
    public string ServerName { get; set; }
    public string Database { get; set; }
    public string UserName { get; set; }
    public string UserLogin { get; set; }


    public static void MyConfigLoad()
    {
        FileInfo fi = new FileInfo(myConfigFileName);
        if (fi.Exists)
        {
            XmlSerializer mySerializer = new XmlSerializer(myConfigClass.GetType());
            StreamReader myXmlReader = new StreamReader(myConfigFileName);
            try
            {

                myConfigClass = (MyConfigClass)mySerializer.Deserialize(myXmlReader);
                myXmlReader.Close();
            }
            catch (Exception e)
            {
                MessageBox.Show("Ошибка сериализации MyConfigLoad\n" + e.Message);
            }

            finally
            {
                myXmlReader.Dispose();
            }
        }
    }

    public static void MyConfigSave()
    {
        XmlSerializer mySerializer = new XmlSerializer(myConfigClass.GetType());
        StreamWriter myXmlWriter = new StreamWriter(myConfigFileName);
        try
        {
            mySerializer.Serialize(myXmlWriter, myConfigClass);
        }
        catch (Exception e)
        {
            MessageBox.Show("Ошибка сериализации MyConfigSave\n" + e.Message);
        }

        finally
        {
            myXmlWriter.Dispose();
        }
    }

}

Serialization give's me simple xml-structure:

<ServerName>navuhodonoser</ServerName>
<Database>matrix</Database>
<UserName>Mr.Smith</UserName>
<UserLogin>neo</UserLogin>

How must i modify my class to get this xml structure ?:

<Connection ServerName="navuhodonoser" Database="matrix" ....>

解决方案

By default the XmlSerializer will serialize all public properties as elements; to override that you'll need to tag each property with [XmlAttribute] (from System.Xml.Serialization namespace) which will give you your desired output.

For example:

[XmlAttribute]
public string ServerName { get; set; }

[XmlAttribute]
public string Database { get; set; }

[XmlElement]
public string UserName { get; set; }

// Note: no attribute
public string UserLogin { get; set; }

will produce something like:

<xml ServerName="Value" Database="Value">
    <UserName>Value</UserName>  <!-- Note that UserName was tagged with XmlElement, which matches the default behavior -->
    <UserLogin>Value</UserLogin>
</xml>

这篇关于在XML存储自定义应用程序设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆