【发布时间】:2011-03-10 20:55:23
【问题描述】:
我是这个网站的新手,所以请原谅我的新手。
我正在开发一个用 C# 完成的大型系统,但在以下情况下我没有找到完全符合我要求的方法。
我有一个包含如下内容的 XML:
<XmlObject>
<Info />
<Objects>
<Component>
<FileData>C:\Folder\file.ext</FileData>
<Component>
</Objects>
</XmlObject>
而我的目标是:
<XmlObject>
<Info />
<Objects>
<Component>
<FileData Extension=".ext">C:\Folder\file.ext</FileData>
<Component>
</Objects>
</XmlObject>
但这是我的限制:
XML 文件是使用 XmlSerializer 创建的,标签 Objects 下的所有内容都是通过反射创建的,因此我无法在 FileData 上添加 [XmlElementAttribute] 之类的标签。
目前我们正在使用 XmlAttributeOverrides 将反射返回的类型添加到 XmlSerializer。我的问题是我对 XmlAttributeOverrides 了解不多,也找不到在此处添加此 NodeAttribute 的方法。
另外,Extension 的值是元素值的真正扩展。示例:
<FileData Extension=".ext">C:\Folder\file.ext</FileData>
<FileData Extension=".png">C:\Folder\file.png</FileData>
非常感谢所有帮助找到此问题或帮助我解决此问题的人。
编辑:上周,我找到了另一种方法来完成这项工作。我没有使用 XmlAttributeOverrides,而是创建了一个新类,当它在 XML 中序列化时,它可以被读取为一个简单的字符串,但带有一个包含属性的 XML 标记。当应用程序进行反射时,我检测应该像这样输出的成员,而不是发出 IL 以便它可以用作字符串,我发出 IL 以便它可以像我的新类一样使用。
我仍然不会结束这个问题,因为我很想了解更多有关 XmlAttributeOverrides 的信息,而且我很确定你们中的一些人会教我有关该主题的有用知识。
如果你们中的一些人想要我为他们自己的文化所做的事情的示例,请告诉我,我会尝试从中创建一个示例,因为我正在编写的代码是公司的财产我为之工作。
【问题讨论】:
-
所以
FileData是在没有 XmlSerializer 的情况下序列化的? -
当你说它是由反射创建时,你的意思是发射IL吗?或者只是检查分配给属性的对象的类型和值?
-
@Austin:是的,FileData 使用 XmlSerializer 进行序列化。一切都是。
标签: c# xml reflection xmlserializer