Существует несколько вариантов, но оба они не используют тип словаря .NET для вашей коллекции. Учитывая желаемый результат, посмотрите на принятый ответ на этот вопрос.
В противном случае, если вы хотите простой XML, вам нужно использовать простую структуру классов. Определите класс gas, который содержит свойство с именем key, представляющее собой массив строк. Я почти уверен, что полученный мыльный XML, вероятно, выглядит так, как вы отобразили.
В обоих случаях это может быть не то, что вы действительно хотите. Я предполагаю, что ключевой элемент в XML должен быть различным для каждой пары ключ / значение, но вы должны быть в состоянии спроектировать свои классы, чтобы справиться с этим (например, создать класс элемента со свойствами строки имени и значения). Если вы хотите работать с классом gas в качестве словаря, вам потребуется написать код для этого.
ОБНОВЛЕНИЕ: Вот пример того, как настраиваемый атрибут CollectionDataContract может быть:
[CollectionDataContract(
Name = "Cities",
ItemName = "city",
KeyName = "cityName",
ValueName = "population")]
public class CityList
: IDictionary<string, int>,
IEnumerable<System.Collections.Generic.KeyValuePair<string, int>>
{
/// snipped
}