使用XMLSerializer将属性添加到XML节点

时间:2011-03-10 20:55:24

标签: c# xml reflection xmlserializer

我是这个网站的新手,请原谅我的新生。

我正在开发一个用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的知识,我很确定你们中的一些人会教我有关该主题的有用知识。

如果你们中的一些人想要我为自己的文化所做的事情的例子,请告诉我,我会尝试创建一个例子,因为我正在制定的代码是公司的财产我为之工作。

1 个答案:

答案 0 :(得分:0)

相关问题