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

时间:2012-05-23 15:35:12

标签: c# xml serialization xml-serialization

我遇到了一个棘手的问题。假设我有一个名为ObjectHost的类,其中包含BusinessObject类型的属性,该类本身包含一些属性(假设NameTown为字符串)。 代码是:

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>

因为它只是我特定用途中的封装对象(出于其他目的)。

我尝试使用XmlRootXmlElement属性,但我没有实现目标。

有解决方法吗?

1 个答案:

答案 0 :(得分:0)

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

您正在传递ObjectHost并且只想要发出ObjectHost.BusinessObject的属性。

您可以使用以下方法之一

  1. 序列化数据的后处理 - &gt;使用XPath查询来获取所需的数据

    /ObjectHost/Data
    
  2. 自定义序列化过程:(这有点棘手)
    a)实现IXmlSerializable
    b)自定义ReadXml,WriteXml和GetSchema

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