C# 如何将包含的对象/属性序列化为根?

C# 如何将包含的对象/属性序列化为根?,c#,xml,serialization,xml-serialization,C#,Xml,Serialization,Xml Serialization,我有一个棘手的问题。假设我有一个名为ObjectHost的类,其中包含一个BusinessObject类型的属性,该属性本身包含一些属性,比如一个名称和一个城镇作为字符串。 守则是: public class ObjectHost { public BusinessObject Data { get; set; } public ObjectHost() { Data = null; } public ObjectHost(Busine

我有一个棘手的问题。假设我有一个名为ObjectHost的类,其中包含一个BusinessObject类型的属性,该属性本身包含一些属性,比如一个名称和一个城镇作为字符串。 守则是:

public class ObjectHost
{
    public BusinessObject Data { get; set; }

    public ObjectHost()
    {
        Data = null;
    }

    public ObjectHost(BusinessObject ei)
    {
        Data = ei;
    }

    public override string ToString()
    {
        return (Data == null) ? "null" : Data.ToString();
    }
}
序列化时,它将生成如下内容:

<ObjectHost>
  <Data>
    <Name>My name</Name>
    <Town>London</Town>
  </Data>
</ObjectHost>
我希望它在哪里:

<Name>My name</Name>
<Town>London</Town>
因为在我的特殊用途中,它只是一个封装对象,用于其他目的

我尝试使用XmlRoot和XmlElement属性,但没有达到我的目标


有解决方案吗?

据我所知,您正在使用XmlSerializer序列化对象

您正在传入ObjectHost,并且只希望发出ObjectHost.BusinessObject的属性

您可以使用以下方法之一

序列化数据的后处理->使用XPath查询获取所需数据

/ObjectHost/Data
自定义序列化过程:这有点棘手 一种实现IXmlSerializable的方法 b自定义ReadXml、WriteXml和GetSchema

在WriteXml中,使用XPath查询或其他Xml方法获取XmlNodes并只写入所需的属性。 这种方法将绑定到特定的数据结构,不能用于不兼容的数据结构


您目前是如何序列化它的?实际上,ObjectHost对象是其他父对象的属性,它们都是使用XmlSerializer序列化的。谢谢,我认为这是一个好方法,但是您能给我指出一些WriteXml/ReadXml的实现指南吗?实际上,它们有一个XmlWriter/XmlReader作为方法参数,在这里应该进行序列化。我不知道应该使用哪种类型的临时XmlWriter来序列化数据对象,然后移动到子节点,然后提取它们,将它们放入WriteXml方法提供给我的原始XmlWriter中。。。