Каков наилучший способ создания динамического XML для веб-службы? - PullRequest
2 голосов
/ 28 октября 2008

Для моего компонента веб-сервиса мне нужно сгенерировать относительно большой XML (~ 500 строк) в зависимости от многих факторов. Здесь я сталкиваюсь с несколькими вариантами выбора: 1. StringBuilder 2. Класс XmlWriter 3. C # объект с сериализацией ???

Какой из них я должен использовать. Есть ли другие способы, о которых я не знаю?

Ответы [ 3 ]

2 голосов
/ 28 октября 2008

Если вы заполняете XML данными из базы данных, вы можете сгенерировать весь XML с помощью SQL-запроса и создать класс со свойством, содержащим BLOB-объект XML. Тип свойства может быть XElement. Это самое простое, что я могу придумать.

1 голос
/ 28 октября 2008

Я генерирую RSS-канал очень просто, используя LINQ to XML. Честно говоря, это самый хороший XML API, о котором я знаю.

У меня есть несколько методов расширения, которые я использую, чтобы сделать его еще проще - он конвертирует из анонимного типа в элементы или атрибуты:

  public static IEnumerable<XElement> AsXElements(this object source)
  {
      foreach (PropertyInfo prop in source.GetType().GetProperties())
      {
          object value = prop.GetValue(source, null);
          yield return new XElement(prop.Name.Replace("_", "-"), value);
      }
  }

  public static IEnumerable<XAttribute> AsXAttributes(this object source)
  {
      foreach (PropertyInfo prop in source.GetType().GetProperties())
      {
          object value = prop.GetValue(source, null);
          yield return new XAttribute(prop.Name.Replace("_", "-"), value ?? "");
      }
  }

Это может быть не совсем уместно для вас, но я считаю это очень удобным. Конечно, это предполагает, что вы используете .NET 3.5 ...

0 голосов
/ 29 октября 2008

Нужна дополнительная информация, но я бы не использовал сериализацию объектов. Это довольно жесткий и скрывает слишком много реализации. Особенно, когда потребляется кем-то, кроме вашего собственного приложения. Я также не стал бы использовать StringBuilder, потому что вдруг вы обрабатываете экранирование контента и выполняете всю тяжелую и подверженную ошибкам работу самостоятельно.

Для вещей низкого уровня, XmlWriter - хороший способ. Если вы Linqing, то XElement довольно хорош.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...