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

◆ WriteElement()

object System.Xml.Serialization.ReflectionXmlSerializationReader.WriteElement ( ElementAccessor element,
bool checkSpecified,
bool checkForNull,
bool readOnly,
string defaultNamespace,
int fixupIndex = -1,
int elementIndex = -1,
Fixup fixup = null,
Member member = null )
inlineprivate

Definition at line 785 of file ReflectionXmlSerializationReader.cs.

786 {
787 object obj = null;
788 if (element.Mapping is ArrayMapping arrayMapping)
789 {
790 obj = WriteArray(arrayMapping, readOnly, element.IsNullable, defaultNamespace, fixupIndex, fixup, member);
791 }
792 else if (element.Mapping is NullableMapping nullableMapping)
793 {
795 }
796 else if (!element.Mapping.IsSoap && element.Mapping is PrimitiveMapping)
797 {
798 if (element.IsNullable && ReadNull())
799 {
800 obj = ((!element.Mapping.TypeDesc.IsValueType) ? null : ReflectionCreateObject(element.Mapping.TypeDesc.Type));
801 }
802 else if (element.Default != null && element.Default != DBNull.Value && element.Mapping.TypeDesc.IsValueType && base.Reader.IsEmptyElement)
803 {
804 base.Reader.Skip();
805 }
806 else if (element.Mapping.TypeDesc.Type == typeof(TimeSpan) && base.Reader.IsEmptyElement)
807 {
808 base.Reader.Skip();
809 obj = default(TimeSpan);
810 }
811 else if (element.Mapping.TypeDesc.Type == typeof(DateTimeOffset) && base.Reader.IsEmptyElement)
812 {
813 base.Reader.Skip();
814 obj = default(DateTimeOffset);
815 }
816 else if (element.Mapping.TypeDesc == QnameTypeDesc)
817 {
819 }
820 else if (element.Mapping.TypeDesc.FormatterName == "ByteArrayBase64")
821 {
823 }
824 else if (element.Mapping.TypeDesc.FormatterName == "ByteArrayHex")
825 {
827 }
828 else
829 {
830 Func<object, string> readFunc = (object state) => ((XmlReader)state).ReadElementContentAsString();
831 obj = WritePrimitive(element.Mapping, readFunc, base.Reader);
832 }
833 }
834 else if (element.Mapping is StructMapping || (element.Mapping.IsSoap && element.Mapping is PrimitiveMapping))
835 {
836 TypeMapping mapping = element.Mapping;
837 if (mapping.IsSoap)
838 {
839 object obj2 = ((fixupIndex >= 0) ? ReadReferencingElement(mapping.TypeName, mapping.Namespace, out fixup.Ids[fixupIndex]) : ReadReferencedElement(mapping.TypeName, mapping.Namespace));
840 if (!mapping.TypeDesc.IsValueType || obj2 != null)
841 {
842 obj = obj2;
844 }
845 if (fixupIndex >= 0)
846 {
847 if (member == null)
848 {
850 }
851 member.Source(obj);
852 return obj;
853 }
854 }
855 else if (checkForNull && member.Source == null && member.ArraySource == null)
856 {
857 base.Reader.Skip();
858 }
859 else
860 {
861 obj = WriteStructMethod((StructMapping)mapping, mapping.TypeDesc.IsNullable && element.IsNullable, checkType: true, defaultNamespace);
862 }
863 }
864 else
865 {
866 if (!(element.Mapping is SpecialMapping specialMapping))
867 {
869 }
870 switch (specialMapping.TypeDesc.Kind)
871 {
872 case TypeKind.Node:
873 obj = ((!(specialMapping.TypeDesc.FullName == typeof(XmlDocument).FullName)) ? ReadXmlNode(!element.Any) : ReadXmlDocument(!element.Any));
874 break;
875 case TypeKind.Serializable:
876 {
877 SerializableMapping serializableMapping = (SerializableMapping)element.Mapping;
878 bool flag = true;
879 if (serializableMapping.DerivedMappings != null)
880 {
881 XmlQualifiedName xsiType = GetXsiType();
882 if (!(xsiType == null) && !QNameEqual(xsiType, serializableMapping.XsiType.Name, serializableMapping.XsiType.Namespace, defaultNamespace))
883 {
884 flag = false;
885 }
886 }
887 if (flag)
888 {
890 obj = ReadSerializable((IXmlSerializable)ReflectionCreateObject(serializableMapping.TypeDesc.Type), wrappedAny);
891 }
892 if (serializableMapping.DerivedMappings != null)
893 {
894 throw new NotImplementedException("sm.DerivedMappings != null");
895 }
896 break;
897 }
898 default:
900 }
901 }
902 member?.ChoiceSource?.Invoke(element.Name);
903 if (member != null && member.ArraySource != null)
904 {
905 member?.ArraySource(obj);
906 }
907 else
908 {
909 member?.Source?.Invoke(obj);
910 member?.CheckSpecifiedSource?.Invoke(true);
911 }
912 return obj;
913 }
static string XmlInternalError
Definition SR.cs:1812
Definition SR.cs:7
object WriteNullableMethod(NullableMapping nullableMapping, bool checkType, string defaultNamespace)
object ReflectionCreateObject([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors|DynamicallyAccessedMemberTypes.NonPublicConstructors|DynamicallyAccessedMemberTypes.PublicMethods|DynamicallyAccessedMemberTypes.NonPublicMethods)] Type type)
object WritePrimitive(TypeMapping mapping, Func< object, string > readFunc, object funcState)
object WriteStructMethod(StructMapping mapping, bool isNullable, bool checkType, string defaultNamespace)
bool QNameEqual(XmlQualifiedName xsiType, string name, string ns, string defaultNamespace)
object WriteArray(ArrayMapping arrayMapping, bool readOnly, bool isNullable, string defaultNamespace, int fixupIndex=-1, Fixup fixup=null, Member member=null)
object? ReadReferencingElement(out string? fixupReference)
IXmlSerializable ReadSerializable(IXmlSerializable serializable)

References System.Xml.Serialization.Accessor.Any, System.Xml.Serialization.Accessor.Default, System.Xml.Dictionary, System.Xml.Serialization.TypeDesc.FormatterName, System.Xml.Serialization.XmlSerializationReader.GetXsiType(), System.Xml.Serialization.ElementAccessor.IsNullable, System.Xml.Serialization.Mapping.IsSoap, System.Xml.Serialization.TypeDesc.IsValueType, System.Xml.Serialization.ReflectionXmlSerializationReader.IsWildcard(), System.Xml.Serialization.Accessor.Mapping, System.Xml.Serialization.Accessor.Name, System.obj, System.Xml.Serialization.ReflectionXmlSerializationReader.QNameEqual(), System.Xml.Serialization.ReflectionXmlSerializationReader.QnameTypeDesc, System.Xml.Serialization.XmlSerializationReader.ReadElementQualifiedName(), System.Xml.Serialization.XmlSerializationReader.ReadNull(), System.Xml.Serialization.XmlSerializationReader.ReadReferencedElement(), System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(), System.Xml.Serialization.XmlSerializationReader.ReadSerializable(), System.Xml.Serialization.XmlSerializationReader.ReadXmlDocument(), System.Xml.Serialization.XmlSerializationReader.ReadXmlNode(), System.Xml.Serialization.XmlSerializationReader.Referenced(), System.Xml.Serialization.ReflectionXmlSerializationReader.ReflectionCreateObject(), System.state, System.Xml.Serialization.XmlSerializationReader.ToByteArrayBase64(), System.Xml.Serialization.XmlSerializationReader.ToByteArrayHex(), System.Xml.Serialization.TypeDesc.Type, System.Xml.Serialization.TypeMapping.TypeDesc, System.DBNull.Value, System.Xml.Serialization.ReflectionXmlSerializationReader.WriteArray(), System.Xml.Serialization.ReflectionXmlSerializationReader.WriteNullableMethod(), System.Xml.Serialization.ReflectionXmlSerializationReader.WritePrimitive(), System.Xml.Serialization.ReflectionXmlSerializationReader.WriteStructMethod(), and System.SR.XmlInternalError.

Referenced by System.Xml.Serialization.ReflectionXmlSerializationReader.WriteMemberElementsIf(), and System.Xml.Serialization.ReflectionXmlSerializationReader.WriteNullableMethod().