public virtual void GetObjectData(SerializationInfo info, StreamingContext context) { if (info == null) { throw new ArgumentNullException("info"); } info.AddValue(ReadOnlyName, _readOnly); #pragma warning disable 618 // Maintain backward serialization compatibility if new APIs are not used. if (_keyComparer == defaultComparer) { info.AddValue(HashCodeProviderName, CompatibleComparer.DefaultHashCodeProvider, typeof(IHashCodeProvider)); info.AddValue(ComparerName, CompatibleComparer.DefaultComparer, typeof(IComparer)); } else if (_keyComparer == null) { info.AddValue(HashCodeProviderName, null, typeof(IHashCodeProvider)); info.AddValue(ComparerName, null, typeof(IComparer)); } else if (_keyComparer is CompatibleComparer) { CompatibleComparer c = (CompatibleComparer)_keyComparer; info.AddValue(HashCodeProviderName, c.HashCodeProvider, typeof(IHashCodeProvider)); info.AddValue(ComparerName, c.Comparer, typeof(IComparer)); } else { info.AddValue(KeyComparerName, _keyComparer, typeof(IEqualityComparer)); } #pragma warning restore 618 int count = _entriesArray.Count; info.AddValue(CountName, count); String[] keys = new String[count]; Object[] values = new Object[count]; for (int i = 0; i < count; i++) { NameObjectEntry entry = (NameObjectEntry)_entriesArray[i]; keys[i] = entry.Key; values[i] = entry.Value; } info.AddValue(KeysName, keys, typeof(String[])); info.AddValue(ValuesName, values, typeof(Object[])); info.AddValue(VersionName, _version); }