Надеюсь, я выбрал правильный форум.
У меня есть объект набора данных с одной таблицей, который пришел ко мне из метода GetDS общего пользовательского компонента. Мне нужно передать XML другому процессу (chunked как байтовый массив). У меня все это работает, но в XML отсутствуют некоторые атрибуты, которых ожидает процесс потребления.
Я создаю объект набора данных и могу управлять именем TableName (корневой элемент) и строкой так:
da.Fill(ds, "Foo")
ds.DataSetName = "FooUpload"
Я использую метод GetXML для сериализации в XML, который выглядит следующим образом:
<?xml version="1.0" standalone="yes" ?>
<FooUpload>
<Foo>
<FooMasterID>483</FooMasterID>
<Country>27</Country>
<PaymentCode>ANN</PaymentCode>
<Amount>132</Amount>
<PaidDate>2012-12-31 00:00:00</PaidDate>
<PaidBy>FooServices</PaidBy>
</Foo>
</FooUpload>
Процесс вызова ожидает
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<FooUpload **ClientCode="FOOO" RecordCount="1" CreateDate="2008-12-09T15:02:18.920" CreateUser="valli"**>
<Foo>
<FooMasterID>483</FooMasterID>
<Country>27</Country>
<PaymentCode>ANN</PaymentCode>
<Amount>132</Amount>
<PaidDate>2012-12-31 00:00:00</PaidDate>
<PaidBy>FooServices</PaidBy>
</Foo>
</FooUpload>
Обратите внимание на атрибуты элемента FooUpload. Этот узел является именем DataTable в DataSet.
Я искал способ управления XMLSerializer и нашел множество примеров для пользовательских объектов. Я даже нашел примеры установки сопоставления столбцов MappingType.Attribute, который близок, но мне нужно сделать это с корневым элементом, который на самом деле является TableName для набора данных.
Я чувствую, что я близко, и если я не найду более элегантного решения, мне придется создать хак, такой как зацикливание и выплевывание измененной строки плюс остальная часть XML.
Заранее спасибо (скрестив пальцы)!