使用.NET XML序列化在其他元素中包装序列化属性

Geo*_*ge2 1 .net c# xml xml-serialization visual-studio-2008

我使用C#+ VSTS2008 + .Net 3.0来进行XML序列化.代码工作正常.下面是我的代码和当前序列化的XML结果.

现在我想在输出XML文件中添加两个附加层.这是我期望的XML结果.有什么简单的方法吗?我不确定NestingLevel是否可以帮助这样做.我想找到一种不会改变MyClass和MyObject结构的简单方法.

预期的XML序列化结果,

<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyObjectProperty>
    <AdditionalLayer1>
      <AdditionalLayer2>
        <ObjectName>Foo</ObjectName>
      </AdditionalLayer1>
    </AdditionalLayer2>
  </MyObjectProperty>
</MyClass>
Run Code Online (Sandbox Code Playgroud)

当前的XML序列化结果,

<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyObjectProperty>
    <ObjectName>Foo</ObjectName>
  </MyObjectProperty>
</MyClass>
Run Code Online (Sandbox Code Playgroud)

我目前的代码,

public class MyClass
{
    public MyObject MyObjectProperty;
}
public class MyObject
{
    public string ObjectName;
}

public class Program
{
    static void Main(string[] args)
    {
        XmlSerializer s = new XmlSerializer(typeof(MyClass));
        FileStream fs = new FileStream("foo.xml", FileMode.Create);
        MyClass instance = new MyClass();
        instance.MyObjectProperty = new MyObject();
        instance.MyObjectProperty.ObjectName = "Foo";
        s.Serialize(fs, instance);

        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

我想找到一种不会改变MyClass和MyObject结构的简单方法.

坦率地说,这不会发生.XmlSerializer(当简单地使用时)遵循类/成员的结构.因此,您无法在不更改结构的情况下添加额外的图层.

当以定制方式(IXmlSerializable)使用时,您可以肯定的一点是它并不简单......这不是一个有趣的界面来实现.

我的建议:介绍一个模仿你想要的格式的DTO,并在序列化之前填充它.