Я могу сериализировать Анонимные Типы как xml?

Эта версия только что вышла вчера. Вы можете проверить несколько вещей:

  • Вручную удалите все запущенные ионные процессы и попробуйте снова.
  • Завершите любой процесс с открытым портом 8200 или запустите с другим номером порта.
  • Запуск с Angular вне Ionic: ng serve
  • Использовать live-сервер: npm install -g live-server & amp; & amp; ионная сборка & amp; live-server
  • Понижение до версии 4.7.1 или даже до 3.20.0 (не лучший выбор)
  • Обновление вашего узла до 10+ LTS
51
задан Community 23 May 2017 в 02:25
поделиться

3 ответа

Это невозможно сделать с помощью XmlSerializer или DataContractSerializer . Это можно сделать с помощью кода, написанного вручную, как показано ниже (я не могу прокомментировать, является ли код достаточно всеобъемлющим для обработки всех типов - но это очень хорошее начало).

26
ответ дан 7 November 2019 в 09:56
поделиться

Я знаю, что это - старое сообщение, но мое решение преобразовывает анонимный тип в XML только в 2 строках кода.

Первое преобразование Вы анонимный тип к JSON, и затем от JSON до XML.

var jsonText = JsonConvert.SerializeObject(data);           // convert to JSON
XmlDocument doc = JsonConvert.DeserializeXmlNode(jsonText); // convert JSON to XML Document

Образец

var data = new       // data - Anonymous Type
{
    Request = new
    {
        OrderNumber = 123,
        Note = "Hello World"
    }
};

var jsonText = JsonConvert.SerializeObject(data);           
XmlDocument doc = JsonConvert.DeserializeXmlNode(jsonText);

Console.WriteLine(doc.OuterXml);                            

Вывод

<Request>
    <OrderNumber>123</OrderNumber>
    <Note>Hello World</Note>
</Request>
0
ответ дан 7 November 2019 в 09:56
поделиться

Что-то вроде этого должно помочь вам начать...

class Program
{
    static void Main(string[] args)
    {
        var me = new
        {
            Hello = "World",
            Other = new
            {
                My = "Object",
                V = 1,
                B = (byte)2
            }
        };

        var x = me.ToXml();
    }
}
public static class Tools
{
    private static readonly Type[] WriteTypes = new[] {
        typeof(string), typeof(DateTime), typeof(Enum), 
        typeof(decimal), typeof(Guid),
    };
    public static bool IsSimpleType(this Type type)
    {
        return type.IsPrimitive || WriteTypes.Contains(type);
    }
    public static XElement ToXml(this object input)
    {
        return input.ToXml(null);
    }
    public static XElement ToXml(this object input, string element)
    {
        if (input == null)
            return null;

        if (string.IsNullOrEmpty(element))
            element = "object";
        element = XmlConvert.EncodeName(element);
        var ret = new XElement(element);

        if (input != null)
        {
            var type = input.GetType();
            var props = type.GetProperties();

            var elements = from prop in props
                           let name = XmlConvert.EncodeName(prop.Name)
                           let val = prop.GetValue(input, null)
                           let value = prop.PropertyType.IsSimpleType()
                                ? new XElement(name, val)
                                : val.ToXml(name)
                           where value != null
                           select value;

            ret.Add(elements);
        }

        return ret;
    }
}

... результирующий xml ...

<object>
  <Hello>World</Hello>
  <Other>
    <My>Object</My>
    <V>1</V>
    <B>2</B>
  </Other>
</object>
68
ответ дан 7 November 2019 в 09:56
поделиться
Другие вопросы по тегам:

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