Я пытаюсь сериализовать 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);
}
По какой-то причине клон не содержит каких-либо данных, (Count eq до 0).
Update:
"INT" и "строка" здесь только для тестирования. В реальном приложении я использую нечто вроде первичного ключа вместо строки и большого объекта вместо int, а сериализованный массив содержит отношения между ними. Сокращая несвязанный код и заменяя типы, я заканчиваю приведенным выше примером.
Я могу использовать только возможности .NET framework.
Ваша первая проблема заключается в следующем: «Я пытаюсь сериализации словарь в словарь <строка, строка>». Зачем вам это делать? –
Вы вызываете, что ваш частный конструктор называется? Возможно, вы могли бы попытаться сделать его общедоступным, как в этом примере: http://msdn.microsoft.com/en-us/library/ms182315%28v=vs.80%29.aspx –
@Chris Shain: У меня есть две коллекции с большие объекты и один сборник, содержащий ссылки между ними (как ссылки на такие объекты). И я хочу сериализовать сборку ссылок, но использовать идентификаторы объектов вместо объектов. –