序列化混淆类C#

时间:2012-03-20 17:00:06

标签: c# xml-serialization

我目前有一个帮助类,我用来混淆静态类,跟踪我正在处理的游戏中的高分。我在发布时使用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 个答案:

答案 0 :(得分:2)

尝试在您的媒体资源上使用XmlElement属性。

答案 1 :(得分:2)

最佳解决方案不是混淆任何类型序列化所需的类。这样做会带来两个好处:

  • 类不会使用奇怪的名字
  • 重新运行模糊处理不会为相同的类/字段生成新名称。

大多数混淆器允许指定使特定类/方法不被混淆的属性。

否则 - 编写自己的序列化。