Как сохранить атрибуты с помощью XElement? - PullRequest
0 голосов
/ 02 марта 2011
new XElement ( "EffectFile",
    new XElement ( "Effects", this.Effects.Select (
        e => new XElement ( "Options", e.Options.Select (
            o => new XElement ( "Option", o ) ) ) ) ) )

Я пытаюсь добавить атрибут к Option в последней строке с именем Type, со значением, которое содержит тип o, который имеет тип Object, но я хочу сохранитьзначение o.GetType(), а затем использовать его позже при разборе файла xml, из которого строковое значение будет приведено обратно к этому значению.

Так что я также не уверен, как я мог бы выполнить программную приведениев коде, где приведение будет выглядеть следующим образом:

object option = (object) (typeStoredInXml) o;

, но в конце значение option будет иметь фактический тип, даже если оно выглядит как объект, но не как строка, если толькофактический тип был строковым.

РЕДАКТИРОВАТЬ: Вот как должен выглядеть xml:

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

Атрибут type может выглядеть по-другому, я не уверен, что o.GetType () будетвыглядело бы так, если бы это было int, но это просто для того, чтобы дать представление.

1 Ответ

2 голосов
/ 02 марта 2011

Это то, что вы ищете?

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.

...