Как контролировать, где XmlSerializer добавляет пространство имен по умолчанию

Я пытаюсь контролировать, на каком уровне пространство имен по умолчанию добавляется к выходу XmlSerializer...

Пока у меня...

<GetAccountDetailRequestStructure>
  <AccountRef xmlns="http://www.govtalk.gov.uk/NAC/GetAccountDetail">4026069</AccountRef>
  <AccountType xmlns="http://www.govtalk.gov.uk/NAC/GetAccountDetail">C</AccountType>
  <SelectionOptions xmlns="http://www.govtalk.gov.uk/NAC/GetAccountDetail">
    <FromDate>2000-01-01</FromDate>
    <ToDate>2015-10-23</ToDate>
    <IncludeAccountSummary>false</IncludeAccountSummary>
  </SelectionOptions>
</GetAccountDetailRequestStructure>

с использованием ...

var ns = new XmlSerializerNamespaces();
ns.Add(string.Empty, "http://www.govtalk.gov.uk/NAC/GetAccountDetail");
var xs = new XmlSerializer(typeof(T));
xs.Serialize(xmlWriter, obj, ns);

но то, что я пытаюсь получить, это...

<GetAccountDetailRequestStructure xmlns="http://www.govtalk.gov.uk/NAC/GetAccountDetail">
  <AccountRef>4026069</AccountRef>
  <AccountType>C</AccountType>
  <SelectionOptions>
    <FromDate>2000-01-01</FromDate>
    <ToDate>2015-10-23</ToDate>
    <IncludeAccountSummary>false</IncludeAccountSummary>
  </SelectionOptions>
</GetAccountDetailRequestStructure>

который, я считаю, эквивалентен первому примеру XML


person SteveC    schedule 26.10.2015    source источник
comment
Они не эквивалентны. В вашем первом примере GetAccountDetailRequestStructure находится в глобальном пространстве имен.   -  person Damien_The_Unbeliever    schedule 26.10.2015
comment
@Damien_The_Unbeliever Хорошо, если это глобальное пространство имен, как вы управляете им в XmlSerializer?   -  person SteveC    schedule 26.10.2015


Ответы (1)


Попробуйте передать пространство имен по умолчанию в конструктору. также из XmlSerializer:

const string defaultNamespace = "http://www.govtalk.gov.uk/NAC/GetAccountDetail";
var ns = new XmlSerializerNamespaces();
ns.Add(string.Empty, defaultNamespace);

// Note the 2nd constructor argument.
var xs = new XmlSerializer(typeof(T), defaultNamespace);

xs.Serialize(xmlWriter, obj, ns);
person Good Night Nerd Pride    schedule 26.10.2015