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

◆ WriteElement()

void System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteElement ( object o,
ElementAccessor element,
bool writeAccessor )
inlineprivate

Definition at line 277 of file ReflectionXmlSerializationWriter.cs.

278 {
279 string text = (writeAccessor ? element.Name : element.Mapping.TypeName);
280 string ns = ((element.Any && element.Name.Length == 0) ? null : ((element.Form != XmlSchemaForm.Qualified) ? string.Empty : (writeAccessor ? element.Namespace : element.Mapping.Namespace)));
281 if (element.Mapping is NullableMapping nullableMapping)
282 {
283 if (o != null)
284 {
285 ElementAccessor elementAccessor = element.Clone();
288 }
289 else if (element.IsNullable)
290 {
291 WriteNullTagLiteral(element.Name, ns);
292 }
293 return;
294 }
295 if (element.Mapping is ArrayMapping)
296 {
297 ArrayMapping arrayMapping = element.Mapping as ArrayMapping;
298 if (element.IsNullable && o == null)
299 {
300 WriteNullTagLiteral(element.Name, (element.Form == XmlSchemaForm.Qualified) ? element.Namespace : string.Empty);
301 return;
302 }
303 if (arrayMapping.IsSoap)
304 {
305 if (arrayMapping.Elements == null || arrayMapping.Elements.Length != 1)
306 {
308 }
309 if (!writeAccessor)
310 {
311 WritePotentiallyReferencingElement(text, ns, o, arrayMapping.TypeDesc.Type, suppressReference: true, element.IsNullable);
312 }
313 else
314 {
315 WritePotentiallyReferencingElement(text, ns, o, null, suppressReference: false, element.IsNullable);
316 }
317 return;
318 }
319 if (element.IsUnbounded)
320 {
322 {
323 foreach (object item in enumerable)
324 {
325 element.IsUnbounded = false;
327 element.IsUnbounded = true;
328 }
329 return;
330 }
331 }
332 if (o != null)
333 {
335 WriteArrayItems(arrayMapping.ElementsSortedByDerivation, null, null, arrayMapping.TypeDesc, o);
337 }
338 return;
339 }
340 if (element.Mapping is EnumMapping)
341 {
342 if (element.Mapping.IsSoap)
343 {
344 base.Writer.WriteStartElement(text, ns);
345 WriteEnumMethod((EnumMapping)element.Mapping, o);
347 }
348 else
349 {
350 WritePrimitive(WritePrimitiveMethodRequirement.WriteElementString, text, ns, element.Default, o, element.Mapping, writeXsiType: false, isElement: true, element.IsNullable);
351 }
352 return;
353 }
354 if (element.Mapping is PrimitiveMapping)
355 {
356 PrimitiveMapping primitiveMapping = element.Mapping as PrimitiveMapping;
357 if (primitiveMapping.TypeDesc == ReflectionXmlSerializationReader.QnameTypeDesc)
358 {
359 WriteQualifiedNameElement(text, ns, element.Default, (XmlQualifiedName)o, element.IsNullable, primitiveMapping.IsSoap, primitiveMapping);
360 }
361 else if (o == null && element.IsNullable)
362 {
363 if (primitiveMapping.IsSoap)
364 {
365 WriteNullTagEncoded(element.Name, ns);
366 }
367 else
368 {
369 WriteNullTagLiteral(element.Name, ns);
370 }
371 }
372 else
373 {
377 }
378 return;
379 }
380 if (element.Mapping is StructMapping)
381 {
382 StructMapping structMapping = element.Mapping as StructMapping;
383 if (structMapping.IsSoap)
384 {
385 WritePotentiallyReferencingElement(text, ns, o, (!writeAccessor) ? structMapping.TypeDesc.Type : null, !writeAccessor, element.IsNullable);
386 }
387 else
388 {
389 WriteStructMethod(structMapping, text, ns, o, element.IsNullable, needType: false);
390 }
391 return;
392 }
393 if (element.Mapping is SpecialMapping)
394 {
395 if (element.Mapping is SerializableMapping)
396 {
397 WriteSerializable((IXmlSerializable)o, text, ns, element.IsNullable, !element.Any);
398 return;
399 }
400 if (o is XmlNode node)
401 {
402 WriteElementLiteral(node, text, ns, element.IsNullable, element.Any);
403 return;
404 }
406 }
408 }
static string XmlInternalError
Definition SR.cs:1812
Definition SR.cs:7
void WriteArrayItems(ElementAccessor[] elements, TextAccessor text, ChoiceIdentifierAccessor choice, TypeDesc arrayTypeDesc, object o)
void WriteStructMethod(StructMapping mapping, string n, string ns, object o, bool isNullable, bool needType)
void WritePrimitive(WritePrimitiveMethodRequirement method, string name, string ns, object defaultValue, object o, TypeMapping mapping, bool writeXsiType, bool isElement, bool isNullable)
void WriteElement(object o, ElementAccessor element, bool writeAccessor)
void WriteQualifiedNameElement(string name, string ns, object defaultValue, XmlQualifiedName o, bool nullable, bool isSoap, PrimitiveMapping mapping)
void WritePotentiallyReferencingElement(string? n, string? ns, object? o)
void WriteSerializable(IXmlSerializable? serializable, string name, string ns, bool isNullable)
void WriteElementLiteral(XmlNode? node, string name, string? ns, bool isNullable, bool any)

References System.Xml.Serialization.Accessor.Any, System.Xml.Serialization.ElementAccessor.Clone(), System.Xml.Serialization.XmlSerializationWriter.CreateInvalidAnyTypeException(), System.Xml.Serialization.Accessor.Default, System.Xml.Dictionary, System.Xml.Serialization.Accessor.Form, System.Xml.Serialization.ElementAccessor.IsNullable, System.Xml.Serialization.Mapping.IsSoap, System.Xml.Serialization.ElementAccessor.IsUnbounded, System.item, System.Xml.Serialization.Accessor.Mapping, System.Xml.Serialization.Accessor.Name, System.Xml.Serialization.Accessor.Namespace, System.Xml.Serialization.TypeMapping.Namespace, System.Xml.Serialization.ReflectionXmlSerializationReader.QnameTypeDesc, System.text, System.Xml.Serialization.TypeMapping.TypeName, System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteArrayItems(), System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteElement(), System.Xml.Serialization.XmlSerializationWriter.WriteElementLiteral(), System.Xml.Serialization.XmlSerializationWriter.WriteEndElement(), System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteEnumMethod(), System.Xml.Serialization.XmlSerializationWriter.WriteNullTagEncoded(), System.Xml.Serialization.XmlSerializationWriter.WriteNullTagLiteral(), System.Xml.Serialization.XmlSerializationWriter.WritePotentiallyReferencingElement(), System.Xml.Serialization.ReflectionXmlSerializationWriter.WritePrimitive(), System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteQualifiedNameElement(), System.Xml.Serialization.XmlSerializationWriter.WriteSerializable(), System.Xml.Serialization.XmlSerializationWriter.WriteStartElement(), System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteStructMethod(), and System.SR.XmlInternalError.

Referenced by System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteElement(), and System.Xml.Serialization.ReflectionXmlSerializationWriter.WriteElements().