c# - 以 XML 格式存储自定义应用程序设置

标签 c# .net xml-serialization 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();
        }
    }

}

序列化为我提供了简单的 xml 结构:

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

我必须如何修改我的类才能获得此 xml 结构?:

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

最佳答案

默认情况下,XmlSerializer 会将所有公共(public)属性序列化为元素;要覆盖它,您需要使用 [XmlAttribute](来自 System.Xml.Serialization 命名空间)标记每个属性,这将为您提供所需的输出。

例如:

[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; }

会产生类似的东西:

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

关于c# - 以 XML 格式存储自定义应用程序设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1986886/

相关文章:

c# - 无法散列超过 3GB 的文件

c# - 可选地使用 Ninject 注入(inject)一个属性

c# - 带有 lambda 和 MySQL 的简单 EntityFramework 抛出异常?

c# - xml 文件的版本控制和 C# 对象的序列化

c# - XML 序列化和 DefaultValue ("") c# 中的相关问题

c# - Linq 到 XML : Queries for If blocks C#

c# - 命令 getMore 失败 : End of file MongoDB

c# - 由于线程退出或应用程序请求,I/O 操作已中止

c# - 我应该如何正确连接两个表,以便我可以访问其中一个实体中的属性?

.net - 如何在 Xml 序列化、DataContractSerializer 和 LINQ to XML 之间进行选择以序列化简单对象树?