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)
我想找到一种不会改变MyClass和MyObject结构的简单方法.
坦率地说,这不会发生.XmlSerializer(当简单地使用时)遵循类/成员的结构.因此,您无法在不更改结构的情况下添加额外的图层.
当以定制方式(IXmlSerializable)使用时,您可以肯定的一点是它并不简单......这不是一个有趣的界面来实现.
我的建议:介绍一个模仿你想要的格式的DTO,并在序列化之前填充它.