C# 使用XMLSerializer向XML节点添加属性

C# 使用XMLSerializer向XML节点添加属性,c#,xml,reflection,xmlserializer,C#,Xml,Reflection,Xmlserializer,我是这个网站的新手,所以请原谅我的新手 我正在开发一个用C#编写的大型系统,在下面的情况下,我没有找到一种方法来实现我想要的 我有一个包含如下内容的XML: <XmlObject> <Info /> <Objects> <Component> <FileData>C:\Folder\file.ext</FileData> <Component>

我是这个网站的新手,所以请原谅我的新手

我正在开发一个用C#编写的大型系统,在下面的情况下,我没有找到一种方法来实现我想要的

我有一个包含如下内容的XML:

<XmlObject>
    <Info />
    <Objects>
        <Component>
            <FileData>C:\Folder\file.ext</FileData>
        <Component>
    </Objects>
</XmlObject>

C:\Folder\file.ext
我的目标是做到这一点:

<XmlObject>
    <Info />
    <Objects>
        <Component>
            <FileData Extension=".ext">C:\Folder\file.ext</FileData>
        <Component>
    </Objects>
</XmlObject>

C:\Folder\file.ext
但以下是我的限制:

XML文件是使用XmlSerializer创建的,标记对象下的所有内容都是通过反射创建的,因此我不能在FileData上添加像[XmlElementAttribute]这样的标记

目前,我们正在使用XmlAttributeOverrides将反射返回的类型添加到XmlSerializer。我的问题是我对XmlAttributeOverrides了解不多,也找不到一种方法将这个NodeAttribute添加到那里

此外,Extension的值是元素值的实际扩展。例如:

<FileData Extension=".ext">C:\Folder\file.ext</FileData>
<FileData Extension=".png">C:\Folder\file.png</FileData>
C:\Folder\file.ext
C:\Folder\file.png
非常感谢所有帮助我找到这个问题或帮助我找到解决这个问题的方法的人

编辑:上周,我找到了另一种方法来实现这一点。我没有使用XmlAttributeOverrides,而是创建了一个新类,当在XML中序列化时,它可以作为简单字符串读取,但带有包含属性的XML标记。当应用程序进行反射时,我检测应该像这样输出的成员,而不是发出IL以便它可以用作字符串,我发出IL以便它可以像我的新类一样使用

尽管如此,我还是不想结束这个问题,因为我对了解更多关于XmlAttributeOverrides的知识很感兴趣,我相信你们中的一些人会教给我关于这个主题的有用知识


如果你们中的一些人想知道我为他们自己的文化所做的事情的例子,请告诉我,我将尝试从中创建一个例子,因为我正在编写的代码是我工作的公司的一个属性。

您可以使用此解决方案:

那么
文件数据
是在没有XmlSerializer的情况下序列化的吗?如果您说它是通过反射创建的,你是说发射IL?或者只是检查分配给属性的对象的类型和值?@Austin:Yes文件数据是用XmlSerializer序列化的。一切都是。正如问题中所述,我已经在使用XmlSerializer了。我想要的答案是,如果XmlAttributeOverrides可以帮助或不帮助,如果有,如何?而且由于将序列化的对象是由反射创建的,所以我不能放置像[]这样的属性来创建预期的结果。