2

現在、作業中のゲームのハイスコアを追跡する静的クラスを難読化するために使用しているヘルパー クラスがあります。リリースで Eazfuscator を使用していますが、スコアがシリアル化されているときに、次の例外がスローされることがわかりました。

ArgumentException 識別子 ' ' は 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);
      }
    }
  }
4

2 に答える 2

2

XmlElementプロパティの属性を使用してみてください。

于 2012-03-20T17:06:38.527 に答える
2

最善の解決策は、あらゆる種類のシリアル化に必要なクラスを難読化しないことです。そうすることで2つのメリットが得られます。

  • クラスに奇妙な名前は使用されません
  • 難読化を再実行しても、同じクラス/フィールドの新しい名前は生成されません。

ほとんどの難読化ツールでは、特定のクラス/メソッドを難読化しないようにする属性を指定できます。

それ以外の場合-独自のシリアル化を記述します。

于 2012-03-20T17:06:39.687 に答える