在 ESRI ArcGIS 中将要素类序列化为 XML
如何将 IFeatureClass 对象序列化为 XML?
有一些资源可以在其他 ArcObject 上使用 IXMLSerializer,但这不适用于 IFeatureClass,因为它没有实现 ISerializable。
How can I serialize an IFeatureClass object to XML?
There are some resources for using IXMLSerializer on other ArcObjects, but that won't work for IFeatureClass because it doesn't implement ISerializable.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我实际上已经找到了这个问题的答案。我在这里发布这个问题和答案是为了其他人的利益以及对我的方法的反馈/批评。
IFeatureClass 不能直接序列化,但 IRecordSet2 可以。因此第一步是实现将 IFeatureClass 转换为 IRecordSet2 的方法:
然后很容易使用 IXMLSerializer 获取 XML:
但是,当转换为 IRecordSet2 时,您会丢失要素类名称,因此在写入文件时,我添加一个元素到 XML 中保存要素类名称:
现在,只需逆向将 XML 读入要素类的过程即可。请记住,添加了一个元素来存储要素类名称:
使用 IXMLSerializer 进行简单反序列化以获取 IRecordSet2:
这是棘手的部分。我愿意接受有关如何改进此问题的建议...将 IRecordSet2 对象隐藏到 IFeatureClass 中:
最后,一个用于删除现有数据集的实用方法。这是从某处复制/粘贴的,但我不记得来源了。
I've actual found my own answer to this question. I'm posting this question and answer here for the benefit of others and for feedback/critique on my approach.
IFeatureClass cannot be serialized directly, but IRecordSet2 can be. So the first step is implementing a method to convert IFeatureClass to IRecordSet2:
Then it's easy to use IXMLSerializer to get XML:
However, when you convert to IRecordSet2, you lose the feature class name, so when writing to a file, I add an element to the XML to hold the feature class name:
Now, just reverse the process to read the XML into a feature class. Remember that an element was added to store the feature class name:
Simple de-serialization using IXMLSerializer to get a IRecordSet2:
This was the tricky part. I'm open to suggestions on how to improve this ... covert the IRecordSet2 object into an IFeatureClass:
Finally, a utility method for deleting an existing dataset. This was copy/pasted from somewhere, but I can't remember the source.