// Still here for backward compatibility private /*static*/ void readTypeDetails(XmlReader xmlReader) { System.Diagnostics.Debug.Assert(null != xmlReader, "The 'xmlReader' argument cannot be null."); string typeName = xmlReader.GetAttribute("name"); Type type = new TypeParser().Resolve(typeName); if (type.IsGenericTypeDefinition) { xmlReader.ReadStartElement("Type"); while (xmlReader.IsStartElement("Type")) { this.readTypeDetails(xmlReader); if (xmlReader.IsStartElement("Type")) xmlReader.ReadStartElement(); } } if (!xmlReader.IsEmptyElement) xmlReader.ReadEndElement(); }
private object deserialize(XmlReader xmlReader, int id, SerializationInfo info, List<int> dimensionLengths, IFormatterConverter converter) { System.Diagnostics.Debug.Assert(null != xmlReader, "The 'xmlReader' argument cannot be null."); System.Diagnostics.Debug.Assert(null != info, "The 'info' argument cannot be null."); System.Diagnostics.Debug.Assert(null != converter, "The 'converter' argument cannot be null."); string assemblyQualifiedTypeName = string.Format("{0}, {1}", info.FullTypeName, info.AssemblyName); Type objectType = new TypeParser().Resolve(assemblyQualifiedTypeName); object deserialized = null; // Return value if (this.isSimpleType(objectType)) { deserialized = this.readValue(xmlReader, objectType, converter); } else if (objectType.IsArray) { Type elementType = objectType.GetElementType(); deserialized = this.deserializeArray(xmlReader, id, elementType, dimensionLengths, converter); } else { deserialized = this.deserializeObject(xmlReader, id, objectType, info, converter); } IObjectReference objectReference = deserialized as IObjectReference; if (null != objectReference) deserialized = objectReference.GetRealObject(this.context); IDeserializationCallback deserializationCallback = deserialized as IDeserializationCallback; if (null != deserializationCallback) deserializationCallback.OnDeserialization(this); if (XmlNodeType.EndElement == xmlReader.NodeType) xmlReader.ReadEndElement(); return deserialized; }
private /*static*/ List<int> readArrayDimensions(XmlReader xmlReader) { System.Diagnostics.Debug.Assert(null != xmlReader, "The 'xmlReader' argument cannot be null."); System.Diagnostics.Debug.Assert(null != xmlReader.GetAttribute("type"), "The 'type' attribute does not exist."); List<int> dimensionLengths = null; // Return value string typeName = xmlReader.GetAttribute("type"); if (!String.IsNullOrEmpty(typeName)) dimensionLengths = new TypeParser().GetArrayDimensions(typeName); return dimensionLengths; }
private void serializeInfo(XmlWriter xmlWriter, SerializationInfo info, IFormatterConverter converter) { System.Diagnostics.Debug.Assert(null != xmlWriter, "The 'xmlWriter' argument cannot be null."); System.Diagnostics.Debug.Assert(null != info, "The 'info' argument cannot be null."); System.Diagnostics.Debug.Assert(null != converter, "The 'converter' argument cannot be null."); string assemblyQualifiedTypeName = string.Format("{0}, {1}", info.FullTypeName, info.AssemblyName); Type objectType = new TypeParser().Resolve(assemblyQualifiedTypeName); this.writeType(xmlWriter, objectType, this.assemblyFormat); foreach (SerializationEntry entry in info) this.serializeEntry(xmlWriter, entry, converter); }