如何将包含的对象/属性序列化为根
本文关键字:属性 序列化 对象 包含 | 更新日期: 2023-09-27 18:35:11
我有一个棘手的问题。假设我有一个名为 ObjectHost
的类,其中包含一个类型 BusinessObject
的属性,它本身包含一些属性(假设一个Name
和一个Town
作为字符串)。代码将是:
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
-
自定义序列化过程:(这有点棘手)
a) 实现 IXmlSerializable
b) 自定义 ReadXml、WriteXML 和 GetSchema在 WriteXML 中,使用 XPath 查询或其他 Xml 方法(获取 XmlNodes)并仅写入所需的属性。
此方法将绑定到特定的数据结构,不能用于不兼容的数据结构。