Xaml序列化和不可变结构?

时间:2009-09-18 21:12:23

标签: c# .net struct immutability xaml-serialization

我该怎么做?

尝试使用TypeConverter,但我唯一能想到的是为类型构建XML,这并没有完全削减它。 xaml序列化中的TypeConverters将转义为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 个答案:

答案 0 :(得分:3)

抱歉,您无法在XAML 2006中使用普通序列化和不可变对象。

使用支持构造函数和工厂方法的XAML 2009,您应该能够实现目标。请注意,WPF 4将不会使用XAML 2009.

答案 1 :(得分:1)

卫生署!我完全误解了这个问题...... 的 =================================

尝试使用标记扩展来创建不可变结构:

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等。

如果您需要更多详细信息,请参阅this link

HTH,

查尔斯