Сериализация XML с помощью Dotfuscator

Я пытаюсь сериализовать пару вложенных классов в файл 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. Кто-нибудь знает, как заставить его работать?


person Trevor Elliott    schedule 25.01.2012    source источник


Ответы (3)


Сериализация XML использует отражение, поэтому тот факт, что Dotfuscator может переименовывать эти классы, вероятно, вызывает проблему.

Попробуй это:

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

Украсьте каждый класс, который будет сериализован XML, с помощью этого декоратора.

person DanTheMan    schedule 25.01.2012

Если вы не возражаете против запутывания этих типов, добавьте атрибут exclude:

[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;  
}  
person seldary    schedule 25.01.2012

Или добавьте атрибут [Serializable] к классам, которые вы не хотите переименовывать.

person Katjoek    schedule 18.03.2021