.net 调整对象图的XAML序列化

.net 调整对象图的XAML序列化,.net,xaml,serialization,.net,Xaml,Serialization,我的应用程序使用内置的.NET解决方案从内存中的对象生成XAML文件:System.XamlServices.Save(Stream,Object) 然而,我得到的XAML污染严重。所有属性总是序列化的有没有办法告诉XAML序列化程序忽略保留默认值的属性?(我几乎可以完全控制序列化的类。) Expression Blend完美地解决了这个问题:如果我们不更改属性,生成的XAML文件将根本不包含它。生成的XAML没有包含所有可能的属性及其默认值,也不像常规的自动生成的混乱。我也想要漂亮的XAML。

我的应用程序使用内置的.NET解决方案从内存中的对象生成XAML文件:
System.XamlServices.Save(Stream,Object)
然而,我得到的XAML污染严重。所有属性总是序列化的有没有办法告诉XAML序列化程序忽略保留默认值的属性?(我几乎可以完全控制序列化的类。)


Expression Blend完美地解决了这个问题:如果我们不更改属性,生成的XAML文件将根本不包含它。生成的XAML没有包含所有可能的属性及其默认值,也不像常规的自动生成的混乱。我也想要漂亮的XAML。

要仅使用一个对象执行此操作:

一次:

  • 创建具有默认属性的新对象
  • 将其序列化为XAML
  • 将其加载到XMLDOM中
  • 通过每个子节点和子节点递归
  • 使用节点的XPath键和innerXML的值将每个节点保存到字典中。显然,如果节点具有相同的路径,那么这将不起作用,您必须对它们进行限定。但在这种情况下,你可能无论如何都不想修剪它们
  • 你不再需要那个东西了。把它扔出去,把字典放在身边
对于每个对象:

  • 将该对象序列化为XAML
  • 将其加载到XML DOM中
  • 通过每个子节点和子节点递归
  • 在字典中查找每个XPath
  • 如果innerXML相同,请在应该害怕的节点列表中注意这一点
  • 递归完成后,向这些节点显示它们害怕的原因-删除它们
  • DOM中应该有漂亮的XAML

我让您在字典中使用相同的XPath,以使嵌套对象更好地工作。不过,这取决于你的对象是什么,以及它们是如何嵌套的。祝你好运

老问题,但我最近也遇到了这个问题,而且似乎Xaml序列化程序尊重

除了.NET4.5之外,我还没有在任何版本中测试过这一点,但我记得在2006年的一篇文章中读到过这一点(不幸的是,我现在找不到)

生成更干净的xaml需要寻找的另外两个属性是 当其他元素被指定为该元素的直接子元素时,允许将特定属性作为“默认值”,并允许指定用于包装这些值的类型(对于集合)