сериализовать запутанный класс C # - PullRequest
1 голос
/ 20 марта 2012

В настоящее время у меня есть вспомогательный класс, который я использую, чтобы запутать статический класс, который отслеживает высокие результаты в игре, над которой я работаю.Я использую Eazfuscator в своем выпуске и обнаружил, что, когда мои результаты были сериализованы, это исключение было выброшено.ArgumentException Identifier '' не соответствует CLS.

Есть ли способ, которым я могу сохранить свой список рекордов в своем классе помощников и все еще иметь возможность сериализовать его после запутывания?

try
{
  GameHighScore highScoreHelper = new GameHighScore();
  highScoreHelper.CreateGameHighScore(highScore);

  XmlSerializer serializer = new XmlSerializer(typeof(GameHighScore));
  serializer.Serialize(stream, highScoreHelper);
}
catch(Exception e)
{
  Logger.LogError("Score.Save", e);
}

Мой класс помощника:

  public class GameHighScore
  {

    public List<HighScoreStruct<string, int>> highScoreList;

    private HighScoreStruct<string, int> scoreListHelper;

    [XmlType(TypeName = "HighScore")]
    public struct HighScoreStruct<K, V>
    {
      public K Initials
      { get; set; }

      public V Score
      { get; set; }

      public HighScoreStruct(K initials, V score) : this() 
      {
        Initials = initials;
        Score = score;
      }
    }

    public GameHighScore()
    {
      highScoreList = new List<HighScoreStruct<string, int>>();
      scoreListHelper = new HighScoreStruct<string, int>();
    }

    public void CreateGameHighScore(List<KeyValuePair<string, int>> scoreList)
    {

      for (int i = 0; i < scoreList.Count; i++)
      {
        scoreListHelper = new HighScoreStruct<string, int>(scoreList[i].Key, scoreList[i].Value);
        highScoreList.Add(scoreListHelper);
      }
    }
  }

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Лучшим решением было бы не запутывать классы, необходимые для любого вида сериализации. Вы получите 2 преимущества:

  • странные имена не будут использоваться для классов
  • повторное запутывание не приведет к появлению новых имен для тех же классов / полей.

Большинство обфускаторов позволяют указывать атрибуты, которые не дают конкретным классам / методам скрывать.

В противном случае - написать собственную сериализацию.

2 голосов
/ 20 марта 2012

Попробуйте использовать атрибут XmlElement в своих свойствах.

...