【问题标题】:Adding Custom Metadata to a Serialized XML Document - .NET将自定义元数据添加到序列化 XML 文档 - .NET
【发布时间】:2020-10-13 21:10:03
【问题描述】:

我目前正在像这样序列化我的 XML 对象:

public static string Serialize<T>(T value) {
  XmlSerializer xsSubmit = new XmlSerializer(typeof(T));

  using (var sww = new StringWriter())
  {
    using (XmlTextWriter writer = new XmlTextWriter(sww))
    {
      xsSubmit.Serialize(writer, value);
    }

    return sww.ToString();
  }
}

但是,我想在我的 XML 文档中添加一些自定义元数据:

<myXML>
  <META>
    <timeStamp>Sunday, November 11, 2020</timeStamp>
    ...
  </META>
  <DATA>
    // Serialized Object
  </DATA>
</myXML>

我是否可以在不使用 XDocument 之类的东西手动构建整个文档或向我的所有对象中添加字段的情况下实现这一点?

【问题讨论】:

  • @AlexanderPetrov 抱歉,我修正了一个错字。

标签: c# .net xml .net-core


【解决方案1】:

有很多方法可以做到这一点。

例如

using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

namespace ConApp
{
    public class Data
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class Meta
    {
        [XmlElement("timeStamp")]
        public DateTime Timestamp { get; set; }

        // other meta properties
    }

    class Program
    {
        static void Main()
        {
            var data = new Data { Id = 5, Name = "Five" };
            var meta = new Meta { Timestamp = DateTime.UtcNow };

            var result = Serialize(data, meta);
            Console.WriteLine(result);
        }

        public static string Serialize<T>(T value, Meta meta)
        {
            var metaSerializer = new XmlSerializer(typeof(Meta));
            var typeSerializer = new XmlSerializer(typeof(T));
            var settings = new XmlWriterSettings { Indent = true };

            using (var stringWriter = new StringWriter())
            using (var xmlWriter = XmlWriter.Create(stringWriter, settings))
            {
                xmlWriter.WriteStartElement("myXML");

                metaSerializer.Serialize(xmlWriter, meta);
                typeSerializer.Serialize(xmlWriter, value);

                xmlWriter.WriteEndElement();
                xmlWriter.Flush();

                return stringWriter.ToString();
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多