具有不带命名空间的对象字段的对象的 C# XML 序列化

标签 c# xml xml-serialization

我正在尝试将对象序列化为具有“对象”字段的 XML。我想要实现没有命名空间或属性的 XML。我可以删除根元素的命名空间,但是,对象元素仍然具有命名空间。

我要序列化的对象;

public class Message {
        public String Metadata { get; set; }
        public Object Payload { get; set; }


        public Message() {
        }

        public Message(String Metadata, Object Payload) {
            this.Metadata = Metadata;
            this.Payload = Payload;
        }
    }

我如何序列化;

var s = new System.Xml.Serialization.XmlSerializer(typeof(Message));
var ns = new System.Xml.Serialization.XmlSerializerNamespaces();
ns.Add(String.Empty, String.Empty);
StringWriter writer = new StringWriter();
s.Serialize(writer, payload, ns);
writer.Close();

我的输出:

<Message>
  <Metadata>myMetadata</Metadata>
  <Payload xmlns:q1="http://www.w3.org/2001/XMLSchema" d2p1:type="q1:string" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance">myPayload</Payload>
</Message>

我的理想输出:

<Message>
  <Metadata>myMetadata</Metadata>
  <Payload>myPayload</Payload>
</Message>

我是一名 Java 开发人员,这是我第一天接触 C#!因此,如果我遗漏了任何明显的内容,请道歉。

(我的主要目标是最终得到以下输出)

<Message>
  <Metadata>myMetadata</Metadata>
  <Payload class="aClass">myPayload</Payload>
</Message>

但是一旦我找到了上述问题的解决方案,我就可以自己研究一下!

最佳答案

为了能够反序列化 Payload 属性,type 属性是必需的;如果序列化器不知道内容的类型,它如何反序列化它?

通常,命名空间会添加到根元素,但您通过指定具有空映射的 XmlSerializerNamespaces 来明确阻止这种情况,因此命名空间会添加到 Payload 元素上相反。

如果您使用XmlSerializer,您能做的最好的事情就是:

<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Metadata>myMetadata</Metadata>
  <Payload xsi:type="xsd:string">myPayload</Payload>
</Message>

现在,您当然可以手动生成 XML,无需任何命名空间,但是您需要某种方式来了解反序列化的 Payload 类型。

关于具有不带命名空间的对象字段的对象的 C# XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17704676/

相关文章:

c# - 如何使用 StreamWriter 在单词之间留出空格

c# - 等待请求时任务等待问题

c# - GroupBy 键值对列表,然后重新组合结果

c# - 在 C# 中通过 TCP 发送 XML 格式的消息

c# - 具有属性的集合的 Xml 序列化

c# - 本地文件存储自动删除内容

c# - ELMAH 在哪里保存数据?

java - JAXB-RI 编码通用列表给出了不正确的输出

css - XML - 使用 xslt 样式表,没有给出输出

c# - 简单数据结构的最轻序列化方法