Dictionary<int, int>
としてシリアル化しようとしていDictionary<string, string>
ます。
だから私は次のようにTest2
タイプを作成しましたDictionary<int, int>
:
[Serializable]
internal sealed class Test2 : Dictionary<int, int>
{
internal Test2()
{
}
private Test2(SerializationInfo info, StreamingContext context)
{
var data = (Dictionary<string, string>)
info.GetValue("data", typeof(Dictionary<string, string>));
foreach (var item in data)
Add(int.Parse(item.Key), int.Parse(item.Value));
}
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
var data = new Dictionary<string, string>();
foreach (var item in this)
data[item.Key.ToString()] = item.Value.ToString();
info.AddValue("data", data, typeof(Dictionary<string, string>));
}
}
次のコードを使用して、シリアル化をテストします。
var test2 = new Test2 {{10, 10}};
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, test2);
stream.Position = 0;
var clone = (Test2) formatter.Deserialize(stream);
}
何らかの理由で、クローンにはデータが含まれていません(カウントeqから0)。
アップデート:
「int」と「string」はテスト専用です。実際のアプリケーションでは、stringの代わりにPrimary Keyのようなものを使用し、intの代わりにbig objectを使用し、シリアル化された配列にはそれらの間の関係が含まれています。無関係なコードを切り詰めて、タイプを置き換えることで、上記の例になります。
.NETFrameworkの機能しか使用できません。