2010-09-30 2 views
6

Я использую .NET 4.0 Framework. Мне нужно написать некоторый XML для взаимодействия с веб-службой. Параметры, переданные веб-службе, будут введены конечным пользователем.Чтение и запись XML в C#

Вопрос в том, какой рекомендуемый подход для взаимодействия с XML в наши дни? Кажется, что в каждой версии .NET Framework есть новый способ сделать то же самое. Но это не обязательно означает, что это лучшее. Что рекомендует сообщество в этом случае?

+0

Все зависит от того, какой XML вы хотите сгенерировать. И поскольку это специфично для веб-сервисов, вы можете бесплатно получить XML-представление, например. из WCF (хотя в вашем вопросе отсутствуют необходимые сведения, чтобы это узнать). –

ответ

9

В каждой версии нет нового. Их всего два. К сожалению, должно быть два, но, конечно же, не более двух.

Рекомендация System.Xml.Linq.XDocument и связанные с ней классы. Они предоставляют чистый, полезный API, который позволяет использовать методы расширения LINQ и Enumerable. Генерировать дерево XML в этом API легко, потому что вы можете встраивать вызовы конструктора, и вы получаете код, который очень похож на сам XML.

Тот, который я не рекомендую, является System.Xml.XmlDocument. Он старый, и он был разработан, чтобы следовать рекомендациям W3C для XML API. Следовательно, он не поддерживает никаких современных или C# -специфических идей, включая перечисления и LINQ. Создание дерева XML в этом API является извилистым: вам нужно создать каждый элемент отдельно и вызвать методы, такие как AppendChild, чтобы превратить их в дерево.

+1

Не забывайте о 'XPathDocument' и' XmlReader'/'XmlWriter'. И есть также XML-сериализатор ... –

+0

Я полностью согласен - избегайте System.Xml.XmlDocument и узнаем, как использовать LINQ to XML XDocument - вы в конечном итоге будете писать гораздо меньше кода, код, который вы пишете, будет чище, быстрее и меньше ошибок, и вы сможете повторно использовать многие идиомы кода LINQ во всем остальном коде. –

2

Если услуга является WCF или реализует стандарты WS- *, вы должны иметь возможность добавить ссылку на нее к своему проекту и взаимодействовать с ней через сущность, а не выполнять все сетевые вызовы и обрабатывать сообщений вручную.

0

Каждый раз, когда мне нужно работать с XML, я думаю, для сериализации. Просто пометьте класс [Serializible] и свойствами с соответствующим атрибутом от System.Xml.Serialization и просто сериализуйте объекты. Это работает только в том случае, если формат XML определен, например. вы можете описать XML с помощью классов. Если вам не нравится @Timwi, то System.Xml.Linq.XDocument - лучший выбор.

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