【问题标题】:How to save attributes using XElement?如何使用 XElement 保存属性?
【发布时间】:2011-07-06 22:14:20
【问题描述】:
new XElement ( "EffectFile",
    new XElement ( "Effects", this.Effects.Select (
        e => new XElement ( "Options", e.Options.Select (
            o => new XElement ( "Option", o ) ) ) ) ) )

我正在尝试在名为Type 的最后一行中向Option 添加一个属性,其值包含o 的类型,它的类型为Object,但我想存储@987654326 @value 然后在解析xml文件时使用它,字符串值将被转换回这个值。

所以我也不确定如何在代码中进行程序化转换,转换看起来像这样:

object option = (object) (typeStoredInXml) o;

但最终option 的值将是实际类型,即使它看起来像一个对象,而不是字符串,除非实际类型是字符串。

编辑:这就是 xml 的样子:

<Effect>
  <Type>Blur</Type>
  <Options>
    <Option Type="int">88</Option>
  </Options>
</Effect>

type 属性可能看起来不同,我不确定 o.GetType() 如果它是 int 是否会像这样,但这只是提供一个想法。

【问题讨论】:

    标签: c# .net casting xmlreader xelement


    【解决方案1】:

    这是你要找的东西吗?

    new XElement ( "EffectFile",
        new XElement ( "Effects", this.Effects.Select (
            e => new XElement ( "Options", e.Options.Select (
                o => new XElement ( "Option", o, 
                    new XAttribute("Type", o.GetType() ) ) ) ) ) )
    

    显然,这仅在o 不为空时才有效。

    顺便说一句,您可能想要研究 XML 序列化,因为它看起来基本上就是您想要的。有专门为帮助处理这类事情而构建的库,因此您不必手动发出和解析 XML。

    【讨论】:

    • 谢谢,是的,但你还在存储o 吗?我想同时存储 o 和 type,但是 type 是一个属性。
    • @Joan Venge:您希望最终的 XML 是什么样的? o 看起来会非常不同,具体取决于它是 int 还是 Customer
    • 感谢我编辑了问题以显示 xml。抱歉o 是选项的值,所以在这种情况下是 88。
    • @Joan Venge:我更新的代码包括“o”。如果“o”是一个非常简单的类型,可以从它自己的 ToString() 输出中解析出来,这显然只会按您的预期工作。
    • XElement 将寻找其他“X”类(XNamespaceXCData 等),并以自己的方式呈现它们。任何其他对象都会将其ToString() 调用的结果附加到另一个对象上,以用作元素的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2011-07-01
    相关资源
    最近更新 更多