2013-06-06 10 views
0

Допустим, что мой код имеет класс определяется как так:Есть ли простой способ разработки легко поддерживаемого кода, где параметры XML должны иметь то же имя, что и переменные класса в C#?

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

В моей основной функции, я создаю объект сортировки и установить вар в действительности.

После этого я анализирую некоторые файлы XML, которые содержат следующее:

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

Я читал, что переменная должна быть ложной, и установить его на ложь.

Это замечательно, но проблема заключается в ремонтопригодности. Кажется, что это сложно, так как если кто-то изменяет имя переменной в коде, им придется изменить все файлы XML.

Есть ли какой-то простой способ обойти это? Или, по крайней мере, простой способ сохранить это? Единственное, что я могу сейчас подумать, это мета-скрипт, который каким-то образом отредактирует код XML и C#, но это похоже на большую работу и, честно говоря, довольно хаки.

+1

Вы можете отделить сериализованные имена от имен C#, используя [классы в 'System.Xml.Serialization'] (http://msdn.microsoft.com/en-us/library/e123c76w.aspx). –

+0

Это может помочь: http://stackoverflow.com/a/364410/836432 –

ответ

0

Образец нижеприведенного примера может помочь вам.

Вместо объявления переменной «имя» и «значение» в XML используйте сериализацию XML, предоставляемую .NET, для анализа XML в соответствующие переменные. Не стесняйтесь удалять «имя» из своего XML в целом или превращать его в устройство для четкого выражения цели этого значения. Я обновил свой XML, чтобы использовать элементы (более читаемым) вместо атрибутов ниже:

XML Sample

<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-элементов «Имя» и «Значение». Это позволяет вам изменять имена переменных, не беспокоясь об обновлении XML, чтобы отразить их. Если вы передумали и захотели переименовать значение «Value» в XML в нечто иное, вам просто нужно будет обновить код в одном месте. [XmlElement («Value»)] с новым именем, определенным в XML. Просто! :)

Удачи вам!

Код Пример

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

У вас есть несколько вариантов:

  • Если вы не контролируете формат файлов XML, вы можете просто написать какой-слесарного код, который считывает с именами атрибутов в XML в любой вашей собственности имена. Нет никаких технических причин, по которым они должны быть одинаковыми.

  • Если вы создаете файлы XML во время выполнения, вы можете использовать отражение, чтобы получить имена свойств и соответственно установить имена атрибутов файла XML. Они всегда будут синхронизироваться таким образом.

  • Если вы создаете файлы XML во время компиляции, и вы являетесь пользователем Visual Studio, я бы предложил изучить T4 Templates. Это отличный инструмент для создания файлов в последовательном, многоразовом и строго типизированном виде.

0

NetReflector хороша в этом. CruiseControl.net использует его для создания объектов из xml-конфигурации.

 Смежные вопросы

  • Нет связанных вопросов^_^