Архитектура отображения файлов - PullRequest
2 голосов
/ 11 мая 2010

Мне нужно знать, как я могу достичь этой цели по классам:

у нас в компании есть два разных приложения (App1, App2)

Приложение может экспортировать XML с известными элементами (идентификатор, имя)

нам нужно app2 для импорта этих данных, но в App2 отображаются разные элементы (CarID, CarName) и эти элементы определены так с помощью информации отображения

<CarID>
<Mapping name="ID"/>
</CarID>
<CarNAme>
 <Mapping name="Name"/>
</CarNAme>"

Как я могу достичь этого как классы или АРХИТЕКТУРА, я разработаю это с помощью c # Мне нужен один интерфейс, потому что мы можем поддерживать разные типы файлов, а не только xml

Ответы [ 2 ]

1 голос
/ 11 мая 2010

Вы можете использовать атрибуты для сопоставления свойств с xmlelements.
Классы Car1 и Car2 будут генерировать один и тот же xml при сериализации.

[Serializable]
[XmlRoot("Car")]
public class Car1
{
    [XmlElement("CarId")]
    public int Id { get; set; }
    [XmlElement("CarName")]
    public string Name { get; set; }
}
[Serializable]
[XmlRoot("Car")]
public class Car2
{
    public int CarId { get; set; }
    public string CarName { get; set; }
}

[TestFixture]
public class CarTest
{
    [Test]
    public void SerializationTest()
    {
        var ms = new MemoryStream();
        var car1 = new Car1 {Id = 10, Name = "Car1"};
        var xs = new XmlSerializer(typeof(Car1));
        var tw = new StreamWriter(ms);
        xs.Serialize(tw, car1);

        ms.Seek(0, SeekOrigin.Begin);
        xs = new XmlSerializer(typeof(Car2));
        var tr = new StreamReader(ms);
        var car2 = (Car2)xs.Deserialize(tr);

        Assert.AreEqual(car1.Id, car2.CarId);
        Assert.AreEqual(car1.Name, car2.CarName);
    }
}
0 голосов
/ 13 мая 2010

Разве ваша проблема не будет решена, если вы введете 2 типа файлов? Файл конфигурации, который определяет фактическое отображение и отдельные файлы данных, которые имеют одинаковый формат.

...