Сериализация БЕЗ xmlns

Вы можете поместить время ожидания в массив и в конце отправить уникальное сообщение со всеми аргументами массива.

message.channel.send('**NOTE:** 0min wait means the ride is **closed**.')
        IoA.GetWaitTimes().then(function(rides) {
            let tosend = []
            for(let i=0, ride; ride=rides[i++];) {
                tosend.push(`**${ride.name}**\n ${ride.waitTime} min wait`)
            }
            message.channel.send("**__Wait time for IoA__**\n\n" + tosend.join('\n'))
        }, console.error);  
        return
16
задан Community 23 May 2017 в 12:32
поделиться

2 ответа

Нет проблем - просто передайте пустую строку в качестве пространства имен по умолчанию в XML-сериализатор:

XmlSerializer newSerializer = 
   new XmlSerializer(typeOfT, "");

К сожалению, нет простой перегрузки конструктора, если вам действительно нужно определить XmlAttributeOverrides и пространство имен по умолчанию - так что либо вы можете пропустить XmlAttributeOverrides и использовать тот конструктор, который я упомянул, либо вам нужно использовать тот, который определяет все возможные параметры (включая XmlAttributeOverrides и пространства имен XML по умолчанию - и еще несколько). ).

4
ответ дан 30 November 2019 в 15:22
поделиться
    public static string SerializeToXml(object obj)
    {
        UTF8Encoding encoding = new UTF8Encoding(false);

        var xmlAttributes = new XmlAttributes();
        xmlAttributes.Xmlns = false;
        xmlAttributes.XmlType = new XmlTypeAttribute() { Namespace = "" };

        var xmlAttributeOverrides = new XmlAttributeOverrides();

        var types = obj.GetType().Assembly.GetTypes().Where(t => string.Equals(t.Namespace, obj.GetType().Namespace, StringComparison.Ordinal));
        foreach (var t in types) xmlAttributeOverrides.Add(t, xmlAttributes);

        XmlSerializer sr = new XmlSerializer(obj.GetType(), xmlAttributeOverrides);

        MemoryStream memoryStream = new MemoryStream();
        StreamWriter writer = new StreamWriter(memoryStream, encoding);

        XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
        namespaces.Add(string.Empty, string.Empty);

        // get the stream from the writer
        memoryStream = writer.BaseStream as MemoryStream;

        sr.Serialize(writer, obj, namespaces);

        // apply encoding to the stream 
        return (encoding.GetString(memoryStream.ToArray()).Trim());
    }

Это будет даже работать на сложный объект, содержащий Кредиты вложенного объекта к user3444796 и Наставнику

0
ответ дан 30 November 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: