【问题标题】:XML Serialization with Dotfuscator使用 Dotfuscator 进行 XML 序列化
【发布时间】:2012-01-25 16:20:30
【问题描述】:

我正在尝试在 XML 文件中序列化几个嵌套类。

我的加载和保存方法使用 XmlSerializer/TextWriter/TextReader。如果我不使用 Dotfuscator,这可以正常工作。但是如果我使用 Dotfuscator,它将无法将类写入文件,并且我只能获取根 XML 标记。

此后我尝试过像这样显式命名每个字段:

[XmlRoot("ParentClass")]
public class ParentClass
{
    [XmlArray("ChildClasses")]
    public List<ChildClass> ChildClasses;
}

[XmlType("ChildClass")]
public class ChildClass
{
    [XmlElement("Property")]
    public string Property;
}

基本上,如果它被序列化,我已经给出了明确的命名。但是我对此进行了测试,但它仍然不适用于 Dotfuscator。有人知道如何让它工作吗?

【问题讨论】:

    标签: c# xml serialization dotfuscator


    【解决方案1】:

    XML 序列化使用反射,因此 Dotfuscator 可以重命名这些类这一事实可能会导致问题。

    试试这个:

    [Obfuscation(Feature = "renaming", Exclude = true)]
    public class ParentClass
    {
       ...
    

    用这个装饰器装饰每个将被 XML 序列化的类。

    【讨论】:

      【解决方案2】:

      如果您不介意不混淆这些类型,请添加排除属性:

      [Obfuscate(Exclude=true)]
      [XmlRoot("ParentClass")]  
      public class ParentClass  
      {  
          [XmlArray("ChildClasses")]  
          public List<ChildClass> ChildClasses;  
      }  
      
      [Obfuscate(Exclude=true)]    
      [XmlType("ChildClass")]  
      public class ChildClass  
      {  
          [XmlElement("Property")]  
          public string Property;  
      }  
      

      【讨论】:

        【解决方案3】:

        或者将 [Serializable] 属性添加到您不想重命名的类中。

        【讨论】:

          猜你喜欢
          • 2010-12-06
          • 2012-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-02
          • 2013-02-03
          相关资源
          最近更新 更多