对象的C#XML序列化,该对象具有没有名称空间的对象字段

对象的C#XML序列化,该对象具有没有名称空间的对象字段,c#,xml,xml-serialization,C#,Xml,Xml Serialization,我正在尝试将一个对象序列化为具有“Object”字段的XML。我希望实现没有名称空间或属性的XML。我可以删除根元素的名称空间,但是,对象元素仍然具有名称空间 我要序列化的对象 public class Message { public String Metadata { get; set; } public Object Payload { get; set; } public Message() { } p

我正在尝试将一个对象序列化为具有“Object”字段的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();
我如何连载

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!所以,如果我遗漏了任何明显的东西,请道歉

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


我的元数据
我的有效载荷

但是,一旦我找到了解决上述问题的办法,我就可以亲自研究一下了

必须使用
类型
属性才能反序列化
有效负载
属性;如果序列化程序不知道内容的类型,它如何对其进行反序列化

通常,名称空间被添加到根元素中,但是您通过使用空映射指定
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,而不需要任何名称空间,但是您需要某种方法来了解反序列化的
负载类型。

我想向Java发送一个c对象。我可以用Java很好地获取元数据,但是“负载”的序列化,因为它是“对象”类型,无法在Java中正确地取消序列化。例如,当向Java发送新消息(“myMD”、“myPL”)时,我的Java方法getMetadata()返回“myMD”,getPayload()返回Java.lang。Object@343dsds-不是“myPL”,这与名称空间有什么关系?Java根本不理解对象。