System.Runtime.Serialization.Json.JsonDataContract.JsonDataContractCriticalHelper.AddCollectionItemContractsToKnownDataContracts C# (CSharp) Method

AddCollectionItemContractsToKnownDataContracts() private method

private AddCollectionItemContractsToKnownDataContracts ( ) : void
return void
            private void AddCollectionItemContractsToKnownDataContracts()
            {
                if (_traditionalDataContract.KnownDataContracts != null)
                {
                    foreach (KeyValuePair<XmlQualifiedName, DataContract> knownDataContract in _traditionalDataContract.KnownDataContracts)
                    {
                        if (!object.ReferenceEquals(knownDataContract, null))
                        {
                            CollectionDataContract collectionDataContract = knownDataContract.Value as CollectionDataContract;
                            while (collectionDataContract != null)
                            {
                                DataContract itemContract = collectionDataContract.ItemContract;
                                if (_knownDataContracts == null)
                                {
                                    _knownDataContracts = new Dictionary<XmlQualifiedName, DataContract>();
                                }

                                if (!_knownDataContracts.ContainsKey(itemContract.StableName))
                                {
                                    _knownDataContracts.Add(itemContract.StableName, itemContract);
                                }

                                if (collectionDataContract.ItemType.GetTypeInfo().IsGenericType
                                    && collectionDataContract.ItemType.GetGenericTypeDefinition() == typeof(KeyValue<,>))
                                {
                                    DataContract itemDataContract = DataContract.GetDataContract(Globals.TypeOfKeyValuePair.MakeGenericType(collectionDataContract.ItemType.GetTypeInfo().GenericTypeArguments));
                                    if (!_knownDataContracts.ContainsKey(itemDataContract.StableName))
                                    {
                                        _knownDataContracts.Add(itemDataContract.StableName, itemDataContract);
                                    }
                                }

                                if (!(itemContract is CollectionDataContract))
                                {
                                    break;
                                }
                                collectionDataContract = itemContract as CollectionDataContract;
                            }
                        }
                    }
                }
            }
        }