2011-04-18 55 views
0

说,我有一个任意的.NET对象(嗯,我可以保证它已应用[DataContract]),并希望将其转换为对其所有字符串属性执行特殊处理的树(例如,XML)。这看起来像一个典型的序列化任务,但从我所学到的.NET序列化程序都没有让我控制属性内容处理(我试图使用DataContractSerializer/XmlSerializer,但XmlObjectSerializerWriteContext是内部的,这要感谢它的设计者)。我不需要将树反序列化,它仅用于视觉表示。将对象图转换为树

除了手动序列化使用反射(看起来像太多的工作来处理集合,图中的循环等),我有任何选择吗?

更新:结束了依靠反射的自定义递归函数。

回答

1

为什么不对XML输出执行字符串处理?使用XPATH抓取所有的字符串元素并执行操作。

你也可以实现的XmlDictionaryWriter执行您的字符串处理(上,你可以从内部包装的的XmlDictionaryWriter并调用方法):

http://msdn.microsoft.com/en-us/library/system.xml.xmldictionarywriter.aspx

和使用的DataContractSerializer来作家是:

http://msdn.microsoft.com/en-us/library/ms195072.aspx

+0

我如何知道xml输出中的属性类型?如果我使用NetDataContractSerializer它会把基元的类型信息? – UserControl 2011-04-18 09:08:09

+0

如果您使用[DataContract] ...否:(如果您使用[Serializable],是的。 – Jeff 2011-04-18 09:11:25

+0

请参阅其他建议...我想这可能对您更好。 – Jeff 2011-04-18 09:11:45