Как я могу преобразовать граф объекта во внешний формат XML - PullRequest
0 голосов
/ 16 июля 2009

Я тоже должен отправить информацию третьей стороне в указанном ими формате XML, я уверен, что это очень распространенная задача.

У меня есть набор файлов XSD, и, используя XSD.exe, я создал набор типов. Чтобы сгенерировать XML, я сопоставляю значения типов в моем домене с типами сторонних производителей:

public ExternalBar Map(InternalFoo foo) {
    var bar = new ExternalBar;

    bar.GivenName = foo.FirstName;
    bar.FamilyName = foo.LastName;

    return bar;

}

Затем я буду использовать XMLSerializer для генерации файлов, возможно, проверяя их по XSD перед их выпуском.

Этот метод очень ручной, и мне интересно, есть ли лучший способ, используя Framework или внешние инструменты для отображения данных и создания файлов.

Ответы [ 2 ]

0 голосов
/ 16 июля 2009

LINQ to XML работает достаточно хорошо для этого ... например,

XElement results = new XElement("ExternalFoos",
    from f in internalFoos
    select new XElement("ExternalFoo", new XAttribute[] {
        new XAttribute("GivenName", f.FirstName),
        new XAttribute("FamilyName", f.LastName) } ));
0 голосов
/ 16 июля 2009

Во-первых, я предполагаю, что свойства объекта в существующем домене соответствуют сторонним типам без особых манипуляций, за исключением повторяющихся назначений свойств.

Поэтому я бы рекомендовал просто использовать стандартную сериализацию XML вашего дерева доменов (сгенерировать исходящую схему для ваших классов с использованием XSD), а затем постобработать результат с помощью набора стилей XSLT. Затем после последующей обработки проверьте полученные XML-документы по сторонним схемам.

Это, вероятно, будет более сложным, чем это, потому что это действительно зависит от сложности отображения между объектными доменами, но это метод, который я успешно использовал в прошлом.

Что касается инструментов с графическим интерфейсом, я слышал (но не использовал себя), что Stylus Studio довольно хорош для сопоставления схемы со схемой (скриншот здесь ).

...