Şu anda iki yönlü bir harita sınıfı yazıyorum ve sınıfın serileştirilmesi/serileştirilmesiyle ilgili bazı sorunlar yaşıyorum (altta soru).Sözlük, serileştirme üzerinde boş
İlgili sınıfın bölümleri aşağıdadır. ileri hem inverseMap sözlükleri yana
/// <summary>
/// Represents a dictionary where both keys and values are unique, and the mapping between them is bidirectional.
/// </summary>
/// <typeparam name="TKey"> The type of the keys in the dictionary. </typeparam>
/// <typeparam name="TValue"> The type of the values in the dictionary. </typeparam>
[Serializable]
public class BidirectionalDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IEquatable<BidirectionalDictionary<TKey, TValue>>, ISerializable, IDeserializationCallback
{
/// <summary>
/// A dictionary that maps the keys to values.
/// </summary>
private readonly Dictionary<TKey, TValue> forwardMap;
/// <summary>
/// A dictionary that maps the values to keys.
/// </summary>
private readonly Dictionary<TValue, TKey> inverseMap;
/// <summary>
/// An instance of the dictionary where the values are the keys, and the keys are the values.
/// </summary>
private readonly BidirectionalDictionary<TValue, TKey> inverseInstance;
/// <summary>
/// Initializes a new instance of the dictionary class with serialized data. </summary>
/// </summary>
/// <param name="info"> The serialization info. </param>
/// <param name="context"> The sserialization context. </param>
protected BidirectionalDictionary(SerializationInfo info, StreamingContext context)
{
this.forwardMap = (Dictionary<TKey, TValue>)info.GetValue("UnderlyingDictionary", typeof(Dictionary<TKey, TValue>));
this.inverseMap = new Dictionary<TValue, TKey>(
forwardMap.Count,
(IEqualityComparer<TValue>)info.GetValue("InverseComparer", typeof(IEqualityComparer<TValue>)));
// forwardMap is always empty at this point.
foreach (KeyValuePair<TKey, TValue> entry in forwardMap)
inverseMap.Add(entry.Value, entry.Key);
this.inverseInstance = new BidirectionalDictionary<TValue, TKey>(this);
}
/// <summary>
/// Gets the data needed to serialize the dictionary.
/// </summary>
/// <param name="info"> The serialization info. </param>
/// <param name="context"> The serialization context. </param>
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("UnderlyingDictionary", forwardMap);
info.AddValue("InverseComparer", inverseMap.Comparer);
}
}
aynı verileri içerir, benim fikrim sadece bunlardan biri (forwardMap) seri hale ve sonra seri kaldırma üzerine 's verilerinden (inverseMap) diğer inşa etmekti. Ancak, inverseMap serileştirme yapıcısındaki herhangi bir veriyle doldurulmuyor. ForwardMap sözlüğünün, 'seriyi kaldırma kurucusu zaten yürütüldükten sonra yalnızca tamamen seri hale getirilmiş gibi görünüyor.
Bunu nasıl düzeltebileceğiniz hakkında bir fikriniz var mı?
sadece onaylamak için ['BinaryFormatter'] kullanıyor musunuz (http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binaryformatter%28v=vs.110% 29.aspx)? – dbc
Kodun tamamını doğrudan test edebilmemiz için lütfen gönderebilir misiniz? –
düzenlemek ve tam Posta koduna hakkında oldu, ama sorun @dbc aşağıda açıklanmıştır tam olarak ne olduğunu. Yani evet, BinaryFormatter kullanıyorum. – Henrik