Xaml сериализация и неизменные структуры? - PullRequest
0 голосов
/ 19 сентября 2009

Как я могу это сделать?

Попробовал использовать TypeConverter, но единственное, о чем я мог подумать, - это создать XML для типов, что не совсем его урезало. TypeConverters в сериализации xaml будет экранировать xml и обрабатывать его как обычный текст. Значение преобразователей не намного лучше.

Теперь я перехожу к ISupportInitialize и выкину, если изменения будут сделаны после инициализации, но мне бы понравился неизменный маршрут ...


Пример типа, который я хочу сериализовать:

public struct Foo
{
  public string Bar {get;private set;}
  public Foo(string bar) : this()
  {
    Bar = bar;
  }
}

и код

var foo = new Foo("lol");
var serializedFoo = XamlWriter.Save(foo);

Ответы [ 2 ]

3 голосов
/ 03 декабря 2009

Извините, вы не можете использовать обычную сериализацию с неизменяемыми объектами в XAML 2006.

С XAML 2009, который поддерживает конструкторы и фабричные методы, вы сможете достичь своей цели. Только предупреждаем, WPF 4 не будет использовать XAML 2009.

1 голос
/ 08 декабря 2009

Doh!Я полностью неправильно понял этот вопрос ...
================================

Попробуйте использовать расширение разметки, чтобы создать неизменяемую структуру:

public class FooExtension : MarkupExtension
{
  public string Bar {get; set;}

  public ImgPathExtension(string bar)
  {
    this.Bar = bar;
  }

  public override object ProvideValue(IServiceProvider serviceProvider)
  {
    var foo = new Foo(this.Bar);
    return foo;
  }
}

Теперь вы можете использовать его в своем XAML с синтаксисом расширения: {ext: Foo Bar = "lol"}

Просто используйте его так же, как и любой другой MarkupExtension, такой как Binding, DynamicResource и т. Д.

См. эту ссылку , если вам нужны дополнительные сведения.

HTH,

Чарльз

...