C# Xaml序列化和不可变结构?
我该怎么做 尝试使用类型转换器,但我能想到的唯一一件事是为类型构造XML,这并不能完全解决问题。xaml序列化中的类型转换器将转义xml并将其视为纯文本。价值转换器并没有好多少 现在,我要转到ISupportInitialize,如果在初始化后进行了更改,我将抛出,但我希望使用不变的路由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
我希望序列化的类型的示例:
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
)不知道如何使用它。是的,我刚刚意识到我的错误。。。很抱歉。