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

◆ InitializeStructMembers()

bool System.Xml.Serialization.SoapReflectionImporter.InitializeStructMembers ( StructMapping mapping,
StructModel model,
RecursionLimiter limiter )
inlineprivate

Definition at line 358 of file SoapReflectionImporter.cs.

359 {
360 if (mapping.IsFullyInitialized)
361 {
362 return true;
363 }
364 if (model.TypeDesc.BaseTypeDesc != null)
365 {
366 StructMapping baseMapping = ImportStructLikeMapping((StructModel)_modelScope.GetTypeModel(model.Type.BaseType, directReference: false), limiter);
367 int num = limiter.DeferredWorkItems.IndexOf(mapping.BaseMapping);
368 if (num >= 0)
369 {
370 if (!limiter.DeferredWorkItems.Contains(mapping))
371 {
372 limiter.DeferredWorkItems.Add(new ImportStructWorkItem(model, mapping));
373 }
375 if (num < num2)
376 {
377 ImportStructWorkItem value = limiter.DeferredWorkItems[num];
378 limiter.DeferredWorkItems[num] = limiter.DeferredWorkItems[num2];
379 limiter.DeferredWorkItems[num2] = value;
380 }
381 return false;
382 }
384 }
386 MemberInfo[] memberInfos = model.GetMemberInfos();
387 foreach (MemberInfo memberInfo in memberInfos)
388 {
390 {
391 continue;
392 }
393 SoapAttributes attributes = GetAttributes(memberInfo);
394 if (attributes.SoapIgnore)
395 {
396 continue;
397 }
398 FieldModel fieldModel = model.GetFieldModel(memberInfo);
399 if (fieldModel == null)
400 {
401 continue;
402 }
403 MemberMapping memberMapping = ImportFieldMapping(fieldModel, attributes, mapping.Namespace, limiter);
404 if (memberMapping == null)
405 {
406 continue;
407 }
408 if (!memberMapping.TypeDesc.IsPrimitive && !memberMapping.TypeDesc.IsEnum && !memberMapping.TypeDesc.IsOptionalValue)
409 {
410 if (model.TypeDesc.IsValueType)
411 {
412 throw new NotSupportedException(System.SR.Format(System.SR.XmlRpcRefsInValueType, model.TypeDesc.FullName));
413 }
414 if (memberMapping.TypeDesc.IsValueType)
415 {
416 throw new NotSupportedException(System.SR.Format(System.SR.XmlRpcNestedValueType, memberMapping.TypeDesc.FullName));
417 }
418 }
419 if (mapping.BaseMapping == null || !mapping.BaseMapping.Declares(memberMapping, mapping.TypeName))
420 {
421 list.Add(memberMapping);
422 }
423 }
424 mapping.Members = list.ToArray();
425 if (mapping.BaseMapping == null)
426 {
428 }
430 return true;
431 }
bool ICollection< KeyValuePair< TKey, TValue > >. Contains(KeyValuePair< TKey, TValue > keyValuePair)
void Add(TKey key, TValue value)
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string XmlRpcRefsInValueType
Definition SR.cs:1628
static string XmlRpcNestedValueType
Definition SR.cs:1626
Definition SR.cs:7
TypeModel GetTypeModel(Type type)
Definition ModelScope.cs:22
StructMapping ImportStructLikeMapping(StructModel model, RecursionLimiter limiter)
void IncludeTypes(ICustomAttributeProvider provider)
MemberMapping ImportFieldMapping(FieldModel model, SoapAttributes a, string ns, RecursionLimiter limiter)

References System.Xml.Serialization.SoapReflectionImporter._modelScope, System.Collections.Generic.Dictionary< TKey, TValue >.Add(), System.Collections.Generic.Dictionary< TKey, TValue >.Contains(), System.Xml.Dictionary, System.SR.Format(), System.Xml.Serialization.SoapReflectionImporter.GetAttributes(), System.Xml.Serialization.SoapReflectionImporter.GetRootMapping(), System.Xml.Serialization.ModelScope.GetTypeModel(), System.Xml.Serialization.SoapReflectionImporter.ImportFieldMapping(), System.Xml.Serialization.SoapReflectionImporter.ImportStructLikeMapping(), System.Xml.Serialization.SoapReflectionImporter.IncludeTypes(), System.list, System.Xml.Serialization.SoapAttributes.SoapIgnore, System.value, System.SR.XmlRpcNestedValueType, and System.SR.XmlRpcRefsInValueType.

Referenced by System.Xml.Serialization.SoapReflectionImporter.ImportStructLikeMapping().