none
Сериализация в XML для Яндекса с помощью XmlSerializer RRS feed

  • Общие обсуждения

  • Подскажите, кто сталкивался, как сериализовать объект в XML так, чтобы избавиться от лишних Атрибутов?

    Код на подобии, что ниже, убирает namespace из корневого узла:

    XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
    xsn.Add(string.Empty, string.Empty);
    
    XmlSerializer f = new XmlSerializer(typeof(Catalog));
    MemoryStream ms = new MemoryStream();
    f.Serialize(ms, Helpers.Market.yml_catalog, xsn);

    Но если используется наследование классов, например производные предложений, как в коде ниже:

        [XmlInclude(typeof(Audiobook))]
        [XmlInclude(typeof(Book))]
        [XmlInclude(typeof(EventTicket))]
        [XmlInclude(typeof(Media))]
        [XmlInclude(typeof(Medicine))]
        [XmlInclude(typeof(Tour))]
        [XmlInclude(typeof(VendorModel))]
        public abstract class Offer
        {
            /// <summary>
            /// Идентификатор товарного предложения. Может содержать только цифры и латинские буквы. Максимальная длина — 20 символов.
            /// </summary>
            [XmlAttribute("id")]
            public ulong Id { get; set; }
        }
    
        [XmlType("vendor.model")]
        public class VendorModel : Offer
        {
            /// <summary>
            /// Модель.
            /// </summary>
            [XmlElement("model")]
            public string Model { get; set; }
        }
    
    

    То в результате сериализации служебных атрибутов избежать не получается:

    <offer xsi:type="vendor.model" id="4" available="false">
    //...
    </offer>

    Как избавиться от xsi:type? Или как этим управлять?

    Или Яндекс не прав, что не пропускает файлы со следующим заголовком:

    <?xml version="1.0"?>
    <yml_catalog xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" date="2017-01-20 13:48">
    <!--предложение-->
    </yml_catalog>

    Помогите разобраться.

    20 января 2017 г. 7:34