自定义XML序列化-包括类名称

4

I'm after the following XML serialization output:

<?xml version="1.0"?>
<Message>
  <Version>1.0</Version>
  <Body>
    <ExampleObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <EmampleOne>Hello!</EmampleOne>
    </ExampleObject>
  </Body>
</Message>

我有以下几个类:

[Serializable]
    public class Message<T>
    {
        public string Version { get; set; }
        public T Body { get; set; }
    }

[Serializable]
public class ExampleObject
{
    public string EmampleOne { get; set; }
}

如果我将它们分别序列化,我会得到:
<?xml version="1.0"?>
<Message>
  <Version>1.0</Version>
  <Body>
    <EmampleOne>Hello!</EmampleOne>
  </Body>
</Message>

并且:

<?xml version="1.0"?>
<ExampleObject>
  <EmampleOne>Hello!</EmampleOne>
</ExampleObject>

如上所示,我希望内部内容包含类名<ExampleObject>

我使用泛型,因为我需要不同的消息正文,我使用以下代码进行序列化:

var obj = new Message<ExampleObject>
{
    Version = "1.0",
    Body = example
};

var serializer2 = new XmlSerializer(typeof (Message<ExampleObject>));

要做到这一点,而不实现IXmlSerializable将需要更改对象模型并使用XmlAttributeOverrides - 可行但不是微不足道的。我目前不在电脑旁,但稍后可能会查看。我想直接编写DOM是否更容易... - Marc Gravell
请注意,XML序列化器不使用“[Serializable]”。 - John Saunders
1个回答

3

正如@Marc Gravell在评论中建议的那样,您可以使用XmlAttributeOverrides

var xmlOverrides = new XmlAttributeOverrides();
var attributes = new XmlAttributes();
attributes.XmlElements
     .Add(new XmlElementAttribute("ExampleObject", typeof (ExampleObject)));
xmlOverrides.Add(typeof(Message<ExampleObject>), "Body", attributes);

var serializer2 = new XmlSerializer(typeof(Message<ExampleObject>), xmlOverrides);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接