Тестировали ли вы XmlSerializer или DataContractSerializer (быстрее) вместе с преобразованиями xslt, так как вы увольняете их с ходу?
Если вы все еще считаете, что xslt слишком медленный для вашего сервера, пусть клиент отобразит его как xhtml. Затем «нагрузка» процессора распространяется на всех ваших пользователей.
Учебное пособие можно найти на w3schools.com .
Целесообразно подумать о масштабировании на будущее, но не стоит упускать из виду очевидную технологию и решение, прежде чем вы действительно поймете, что это будет узким местом.
Вам также следует рассчитать стоимость добавления другого интерфейсного сервера по сравнению с более сложным программным маршрутом. Вы также можете изучить кэширование для повышения производительности.
[Изменить]
Другое решение заключается в реализации метода WriteHtml для каждого класса, и из вашего высшего класса вы будете вызывать всех ваших дочерних писателей. Ручной и эффективный (но требует больше управления, так как вы должны обновить писателя, если вы добавляете свойство).
class Person
{
public void WriteHtml(Stream writeStream);
{
writeStream.Write( "<p id="userName" class="userName">{0}</p>", UserName );
etc.
Adress.WriteHtml(writeStream);
writeStream.Write( "<div id="address" class="address">" );
foreach( Address ad in Adresses ) ad.WriteHtml(writeStream);
writeStream.Write( "</div>" );
}
}
Вы также можете переопределить ToString () в каждом классе, чтобы вернуть представление html, и использовать его вместо этого.
Поскольку вы утверждаете, что классы просты, они должны быть удобочитаемыми и читаемыми, но я все же предпочитаю xslt, так как его легче изменить без перекомпиляции. И самая сложная часть рендеринга, которую у вас есть, это рендеринг ваших контейнерных тегов, поскольку вы храните массивы объектов. Если вы реализовали для них класс Collection, вы могли бы вместо этого поддерживать теги Container в этом классе.
class Person
{
AddressCollection Adresses;
// instead of
Adress[] Adresses;
}
Тогда вопрос в том, что вы считаете «простым»: D