我正在使用 XmlSerializer 序列化一个对象,在我的对象中指定属性以向 XmlSerializer 发出指令,如下所示:
[XmlType("FooElement")]
public class Foo {
[XmlAttribute("Type")]
public string fooType;
[XmlElement("Name")]
public string Name;
[XmlElement("Bar")]
public Bar BarObject;
}
public class Bar {
[XmlElement("Message")]
public string BarString;
[XmlElement("From")]
public string FromName;
}
当序列化 Foo 类型的对象时,将生成以下 XML:
<Foo Type="TypeName">
<Name>Name of Foo</Name>
<Bar>
<Message>5:00 Somewhere</Message>
<From>Jane Smith</From>
</Bar>
</Foo>
我想要的是将 Foo 中的所有数据展平到同一级别,如下所示:
<Foo Type="TypeName">
<Name>Name of Foo</Name>
<Message>5:00 Somewhere</Message>
<From>Jane Smith</From>
</Foo>
对于我的需求来说,Foo 和 Bar 保持独立的类很重要。除了合并类之外,当序列化为 XML 时,我将如何将 Foo 的元素展平为一个级别?如果可以通过使用 [Property] 标签来完成,那将是最好的。我愿意改变我的 XML 序列化方法。
编辑:我已经切换到 XmlWriter类(class)。这将使我能够在我正在寻找的层次结构中编写 XML 元素。使用此处生成的 XML 的程序比 C# XML 工具简单得多。较简单的解析器在处理 XmlSerializer 生成的 XML 时遇到困难。
最佳答案
应该这样做
void Main()
{
var foo = new Foo
{
Name = "name",
fooType = "type",
BarObject = new Bar { BarString = "bar"}
};
var s = new XmlSerializer(typeof(Foo));
using (var writer = new StringWriter())
{
s.Serialize(writer, foo);
writer.ToString().Dump();
}
}
public class Foo {
[XmlAttribute("Type")]
public string fooType;
[XmlElement("Name")]
public string Name;
[XmlElement("Message")]
public Bar BarObject;
}
public class Bar {
[XmlText]
public string BarString;
}
输出是:
<?xml version="1.0" encoding="utf-16"?>
<Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Type="type">
<Name>name</Name>
<Message>bar</Message>
</Foo>
关于c# - 如何在 XML 中序列化对象,同时展平属性的内部层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935971/