是否有一种简单的方法来开发易于维护的代码,其中XML参数必须与c#中的类变量具有相同的名称?

本文关键字:参数 类变量 XML 一种 简单 方法 代码 是否 维护 易于 开发 | 更新日期: 2023-09-27 18:17:20

假设我的代码有一个这样定义的类:

class test{
    bool var;
    public test(){}
}

在我的主函数中,我创建了一个这样的对象,并将var设置为true。

之后我解析一些包含以下内容的XML文件:

<param name="var" value="false"/>

我读到var必须为false,并将其设置为false。

这很好,但问题是可维护性。维护它似乎很麻烦,因为如果有人更改了代码中的变量名,他们将不得不更改所有的XML文件。

有什么简单的方法吗?或者至少是一种简单的维护方法?我现在唯一能想到的是一些元脚本,它将以某种方式编辑XML和c#代码,但这似乎要做很多工作,而且老实说相当粗糙。

是否有一种简单的方法来开发易于维护的代码,其中XML参数必须与c#中的类变量具有相同的名称?

下面的代码示例可能对您有所帮助。

不要在XML中声明变量"name"answers"value",而是使用。net提供的XML序列化将XML解析为适当的变量。您可以随意从XML中完全删除"name",或者将其转换为一种设备,以便清楚地表达值的目的。我已经更新了你的XML使用元素(更可读),而不是下面的属性:

XML示例

<Test>
    <Params>
        <Param>
            <Name>Meaningful Parameter Name</Name>
            <Value>1</Value>
        </Param>
        <Param>
            <Name>Meaningful Parameter Name2</Name>
            <Value>0</Value>
        </Param>
    </Params>
</Test>

在代码中,我们使用XML序列化将XML元素赋值给变量。如您所见,Param类将包含一个字符串名称和一个布尔值,它们将从XML元素"name"answers"value"中读取。这允许您更改变量名,而不必担心更新XML来反映它们。如果您改变了主意,想要将XML中的"Value"重命名为不同的名称,您只需要用XML中定义的新名称更新[XmlElement("Value")]中的代码。简单!:)

祝你好运!

代码示例

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
    public class Program
    {
        private static void Main(string[] args)
        {
            string testXML = @"<Test>
                                    <Params>
                                        <Param>
                                            <Name>Meaningful Parameter Name</Name>
                                            <Value>1</Value>
                                        </Param>
                                        <Param>
                                            <Name>Meaningful Parameter Name2</Name>
                                            <Value>0</Value>
                                        </Param>
                                    </Params>
                               </Test>";
            XDocument doc = XDocument.Parse(testXML);
            XmlSerializer serializer = new XmlSerializer(typeof (Test));
            Test testDeserialized = (Test) serializer.Deserialize(doc.CreateReader());
            foreach (Param param in testDeserialized.Params)
            {
                Console.WriteLine("Name: " + param.Name + ", Value: " + param.Value);
            }
            Console.ReadLine();
        }
    }
    [XmlRoot]
    public class Test
    {
        [XmlArray("Params")]
        [XmlArrayItem("Param", typeof (Param))]
        public Param[] Params { get; set; }
    }
    public class Param
    {
        [XmlElement("Name")]
        public string Name { get; set; }
        [XmlElement("Value")]
        public bool Value { get; set; }
    }
}

您有几个选择:

  • 如果您不控制XML文件的格式,您可以编写一些管道代码,从XML的属性名读入您的属性名。

  • 如果您在运行时生成XML文件,您可以使用反射来获取属性名并相应地设置XML文件属性名。

  • 如果您在编译时创建XML文件,并且您是Visual Studio用户,我建议查看T4模板。它们是一个以一致、可重用和强类型的方式生成文件的好工具。

NetReflector很擅长这个。CruiseControl.net使用它从xml配置创建对象。