カスタム Comparer をシリアル化する必要があるのはなぜですか? ここに私のために働くテストケースがあります。
システムを使用する;
System.Collections.Generic の使用;
System.Runtime.Serialization の使用;
System.IO の使用;
公開クラス MyKey {
パブリック文字列の名前 {get; 設定; }
パブリック文字列 ID { get; 設定; }
}
public class MyKeyComparer :IEqualityComparer {
public bool Equals( MyKey x, MyKey y ) {
return x.Id.Equals( y.Id ) ;
}
public int GetHashCode( MyKey obj ) {
if( オブジェクト == null )
新しい ArgumentNullException() をスローします。
return ((MyKey)obj).Id.GetHashCode();
}
}
パブリック クラス MyDictionary :Dictionary {
パブリック MyDictionary()
:base( 新しい MyKeyComparer() )
{}
}
クラス プログラム {
static void Main( string[] args ) {
var myDictionary = 新しい MyDictionary();
myDictionary.Add( new MyKey() { Name = "MyName1", Id = "MyId1" }, "MyData1" );
myDictionary.Add( new MyKey() { Name = "MyName2", Id = "MyId2" }, "MyData2" );
var ser = new DataContractSerializer( typeof( MyDictionary ) );
using( FileStream writer = new FileStream( "Test.Xml", FileMode.Create ) )
ser.WriteObject( ライター, myDictionary );
using( FileStream リーダー = new FileStream( "Test.Xml", FileMode.Open ) )
myDictionary = (MyDictionary)ser.ReadObject( リーダー );
}
}