2012-03-20 7 views
1

私は現在、私が取り組んでいるゲームで高得点を記録する静的クラスを難読化するために使用しているヘルパークラスを持っています。私は自分のリリースでEazfuscatorを使用していて、自分のスコアがシリアライズされているときにこの例外がスローされていることがわかりました。 ArgumentException識別子 ''はCLSに準拠していません。難読化されたクラスをシリアライズC#

ハイスコアのリストを自分のヘルパークラスに保存し、難読化した後もそれをシリアル化できる方法はありますか?

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つの利益を得るでしょう。

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

    それ以外の場合は、独自のシリアル化を作成します。

  • +1

    構造体に '[Obfuscation(Exclude = True)]'を追加すると、チャームのように動作し、スコアはxmlファイルに正しくシリアル化されます。ありがとう! – NexAddo

    2

    あなたの特性上XmlElement属性を使用してみてください。

    +0

    +1。これは動作し、名前の変更に関する問題を解決します。すべてのプロパティに注釈を付ける必要があることに注意してください。 –

    +0

    @AlexeiLevenkovそれは本当です。まあ、私はまだなぜパブリッククラスを難読化する必要があるのか​​わかりませんが、それは別の質問です。 –

    +0

    私のリストの一部である構造にタグを付ける方法はありますか?そうすれば、コードの難読化によって適切にシリアル化できますか? – NexAddo

    関連する問題