Я использую XmlSerializer для создания документа xml, используемого для больших коммерческих сервисов ebay.C# XmlSerializer xmlns в дочернем элементе, соответствующем родительскому
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<BulkDataExchangeRequests xmlns="urn:ebay:apis:eBLBaseComponents">
<Header>
<SiteID>0</SiteID>
<Version>775</Version>
</Header>
<AddFixedPriceItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<Version>775</Version>
<Item>
<AutoPay>false</AutoPay>
<BuyerProtection>ItemIneligible</BuyerProtection>
<BuyItNowPrice currencyID="USD">0.0</BuyItNowPrice>
<Country>US</Country>
<Currency>USD</Currency>
<Description>test</Description>
<GiftIcon>0</GiftIcon>
</Item>
</AddFixedPriceItemRequest>
</BulkDataExchangeRequests>
Проблема у меня является получение AddFixedPriceItemRequest порожденного сериализатором на самом деле содержит, что XMLNS как BulkDataExchangeRequests элемента имеет. Кажется, это требование, чтобы это работало. Я генерировать насыпной тег с помощью:
writer.WriteStartElement("BulkDataExchangeRequests", "urn:ebay:apis:eBLBaseComponents");
я создаю сериалайзер.
serializer = new XmlSerializer(typeof(AddFixedPriceItemRequestType));//, "urn:ebay:apis:eBLBaseComponents");
и сериализации с пространством имен
request = new AddFixedPriceItemRequestType()
{
//populate data.
};
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add("", "urn:ebay:apis:eBLBaseComponents");
serializer.Serialize(writer, request, namespaces);
Это тип с XML-атрибуты:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.5420")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:ebay:apis:eBLBaseComponents",TypeName="AddFixedPriceItemRequest")]
public partial class AddFixedPriceItemRequestType : AbstractRequestType {
//filled in class
}
мой выход заканчивается так:
<AddFixedPriceItemRequest xmlns="">
<ErrorLanguage xmlns="urn:ebay:apis:eBLBaseComponents">en_US</ErrorLanguage>
<Version xmlns="urn:ebay:apis:eBLBaseComponents">837</Version>
<Item p4:type="Item" xmlns:p4="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:ebay:apis:eBLBaseComponents">
Могли кто-то помогает в том, как xmlns из addfixedpriceitemrequest устанавливается в соответствии с массивными xmlns через сериализатор. Или порекомендуйте другой способ сделать это. Я пытался избежать записи каждого свойства с помощью createelement/writeelement.
Вы уверены, что это переопределить из милиции 'xmlns' на' AddFixedPriceItemRequest' уровне? Он уже определен в 'BulkDataExchangeRequests' и должен быть унаследован должным образом. Но itdefinitely * не следует * переопределять как 'xmlns =" "' – DarkWalker