private XmlTypeContext CreateTypeContext(Type valueType, XmlTypeContext context) { IXmlConverter readConverter = null; IXmlConverter writeConverter = null; foreach (var converter in converters.Concat(DefaultConverters)) { if (readConverter == null && converter.CanRead(valueType)) { readConverter = converter; if (writeConverter != null) { break; } } if (writeConverter == null && converter.CanWrite(valueType)) { writeConverter = converter; if (readConverter != null) { break; } } } var contract = contractResolver.ResolveContract(valueType); readConverter = GetConverter(contract, readConverter); writeConverter = GetConverter(contract, writeConverter); context = new XmlTypeContext(contract, readConverter, writeConverter); typeContextCache.TryAdd(valueType, context); return(context); }