【问题标题】:Adding Attribute to an XML node using an XMLSerializer使用 XMLSerializer 向 XML 节点添加属性
【发布时间】: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


【解决方案1】:

【讨论】:

  • 就像问题中所述,我已经在使用 XmlSerializer。我要寻找的答案是 XmlAttributeOverrides 是否可以提供帮助,如果可以,如何提供?
  • 而且由于将被序列化的对象是通过反射创建的,所以我不能把像 [] 这样的属性来创建预期的结果。
猜你喜欢
  • 1970-01-01
  • 2018-09-16
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多