【发布时间】:2011-08-19 05:41:23
【问题描述】:
我需要在 C# 中将对象序列化为 XML。物品应包裹在信封中。为此,我创建了以下 Envelope 类:
[XmlInclude(typeof(Person))]
public class Envelope
{
public string SomeValue { get; set; }
public object WrappedObject { get; set; }
}
我使用以下代码序列化类:
string fileName = ...;
XmlSerializer serializer = new XmlSerializer(typeof(Envelope));
TextWriter textWriter = new StreamWriter(fileName);
try
{
serializer.Serialize(textWriter, <instance of envelope>);
}
finally
{
textWriter.Close();
}
当我将 Person 类型的对象分配给 WrappedObject 时,我得到以下 XML:
<Envelope>
<SomeValue>...</SomeValue>
<WrappedObject xsi:type="Person">
....
</WrappedObject>
</Envelope>
问题是,我希望包装对象的标签以我传入的实际类命名。例如,如果我将Person 的实例分配给WrappedObject,我想要XML 如下所示:
<Envelope>
<SomeValue>...</SomeValue>
<Person>
....
</Person>
</Envelope>
如果我分配Animal 的实例,我想得到
<Envelope>
<SomeValue>...</SomeValue>
<Animal>
....
</Animal>
</Envelope>
我将如何实现这一目标?
编辑
其实我已经稍微简化了我的例子……被包裹的对象实际上又被包裹了:
public class Envelope
{
public string SomeValue { get; set; }
public Wrapper Wrap { get; set; }
}
[XmlInclude(typeof(Person))]
public class Wrapper
{
public object WrappedObject { get; set; }
}
我将如何使用属性覆盖来处理这个问题?
【问题讨论】:
标签: c# xml serialization xml-serialization