Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xaml序列化和不可变结构?_C#_.net_Struct_Immutability_Xaml Serialization - Fatal编程技术网

C# Xaml序列化和不可变结构?

C# Xaml序列化和不可变结构?,c#,.net,struct,immutability,xaml-serialization,C#,.net,Struct,Immutability,Xaml Serialization,我该怎么做 尝试使用类型转换器,但我能想到的唯一一件事是为类型构造XML,这并不能完全解决问题。xaml序列化中的类型转换器将转义xml并将其视为纯文本。价值转换器并没有好多少 现在,我要转到ISupportInitialize,如果在初始化后进行了更改,我将抛出,但我希望使用不变的路由 我希望序列化的类型的示例: public struct Foo { public string Bar {get;private set;} public Foo(string bar) : this

我该怎么做

尝试使用类型转换器,但我能想到的唯一一件事是为类型构造XML,这并不能完全解决问题。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);

很抱歉,在XAML 2006中不能对不可变对象使用常规序列化


使用支持构造函数和工厂方法的XAML2009,您应该能够实现您的目标。请注意,WPF4不会使用XAML2009

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:foobar=“lol”}

只需像使用任何其他MarkupExtension(如绑定、DynamicSource等)一样使用它

看看你是否需要更多的细节

嗯,


Charles

如果你能展示一些代码来理解你想做的事情,这会有所帮助。这可以在反序列化手写XAML时使用,但是XAML序列化(即
XamlWriter.Save
)不知道如何使用它。是的,我刚刚意识到我的错误。。。很抱歉。