Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ImportKnownTypeAttributes() [2/2]

static void System.Runtime.Serialization.DataContract.ImportKnownTypeAttributes ( Type type,
Dictionary< Type, Type > typesChecked,
ref Dictionary< XmlQualifiedName, DataContract > knownDataContracts )
inlinestaticprivateinherited

Definition at line 2278 of file DataContract.cs.

2279 {
2280 while (type != null && IsTypeSerializable(type) && !typesChecked.ContainsKey(type))
2281 {
2283 object[] array = type.GetCustomAttributes(Globals.TypeOfKnownTypeAttribute, inherit: false).ToArray();
2284 if (array != null)
2285 {
2286 bool flag = false;
2287 bool flag2 = false;
2288 for (int i = 0; i < array.Length; i++)
2289 {
2290 KnownTypeAttribute knownTypeAttribute = (KnownTypeAttribute)array[i];
2291 if (knownTypeAttribute.Type != null)
2292 {
2293 if (flag)
2294 {
2296 }
2297 CheckAndAdd(knownTypeAttribute.Type, typesChecked, ref knownDataContracts);
2298 flag2 = true;
2299 continue;
2300 }
2301 if (flag || flag2)
2302 {
2304 }
2305 string methodName = knownTypeAttribute.MethodName;
2306 if (methodName == null)
2307 {
2309 }
2310 if (methodName.Length == 0)
2311 {
2313 }
2314 MethodInfo method = type.GetMethod(methodName, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic, Type.EmptyTypes);
2315 if (method == null)
2316 {
2318 }
2319 if (!Globals.TypeOfTypeEnumerable.IsAssignableFrom(method.ReturnType))
2320 {
2322 }
2323 object obj = method.Invoke(null, Array.Empty<object>());
2324 if (obj == null)
2325 {
2327 }
2328 foreach (Type item in (IEnumerable<Type>)obj)
2329 {
2330 if (item == null)
2331 {
2333 }
2334 CheckAndAdd(item, typesChecked, ref knownDataContracts);
2335 }
2336 flag = true;
2337 }
2338 }
2339 try
2340 {
2341 if (GetDataContract(type) is CollectionDataContract { IsDictionary: not false } collectionDataContract && collectionDataContract.ItemType.GetGenericTypeDefinition() == Globals.TypeOfKeyValue)
2342 {
2343 DataContract dataContract = GetDataContract(Globals.TypeOfKeyValuePair.MakeGenericType(collectionDataContract.ItemType.GetGenericArguments()));
2344 if (knownDataContracts == null)
2345 {
2346 knownDataContracts = new Dictionary<XmlQualifiedName, DataContract>();
2347 }
2348 knownDataContracts.TryAdd(dataContract.StableName, dataContract);
2349 }
2350 }
2351 catch (InvalidDataContractException)
2352 {
2353 }
2354 type = type.BaseType;
2355 }
2356 }
bool TryAdd(TKey key, TValue value)
void Add(TKey key, TValue value)
static void CheckAndAdd(Type type, Dictionary< Type, Type > typesChecked, [NotNullIfNotNull("nameToDataContractTable")] ref Dictionary< XmlQualifiedName, DataContract > nameToDataContractTable)
DataContract(DataContractCriticalHelper helper)
static string GetClrTypeFullName(Type type)
static DataContract GetDataContract(Type type)
static void ThrowInvalidDataContractException(string message, Type type)
static string KnownTypeAttributeOneScheme
Definition SR.cs:198
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string KnownTypeAttributeUnknownMethod
Definition SR.cs:194
static string KnownTypeAttributeNoData
Definition SR.cs:202
static string KnownTypeAttributeReturnType
Definition SR.cs:196
static string KnownTypeAttributeMethodNull
Definition SR.cs:204
static string KnownTypeAttributeValidMethodTypes
Definition SR.cs:200
static string KnownTypeAttributeEmptyString
Definition SR.cs:192
Definition SR.cs:7

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.array, System.Runtime.Serialization.DataContract.CheckAndAdd(), System.Collections.Generic.Dictionary< TKey, TValue >.ContainsKey(), System.Runtime.Serialization.Dictionary, System.Type.EmptyTypes, System.SR.Format(), System.Runtime.Serialization.DataContract.GetClrTypeFullName(), System.Runtime.Serialization.DataContract.GetDataContract(), System.Text.RegularExpressions.i, System.Runtime.Serialization.DataContract.IsTypeSerializable(), System.item, System.SR.KnownTypeAttributeEmptyString, System.SR.KnownTypeAttributeMethodNull, System.SR.KnownTypeAttributeNoData, System.SR.KnownTypeAttributeOneScheme, System.SR.KnownTypeAttributeReturnType, System.SR.KnownTypeAttributeUnknownMethod, System.SR.KnownTypeAttributeValidMethodTypes, System.obj, System.Runtime.Serialization.DataContract.ThrowInvalidDataContractException(), System.Collections.Generic.Dictionary< TKey, TValue >.TryAdd(), System.type, System.Runtime.Serialization.Globals.TypeOfKeyValue, System.Runtime.Serialization.Globals.TypeOfKeyValuePair, System.Runtime.Serialization.Globals.TypeOfKnownTypeAttribute, and System.Runtime.Serialization.Globals.TypeOfTypeEnumerable.