Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Annotations / Serializer.cs / 1305600 / Serializer.cs
//------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // Serializer performs the boot-strapping to call the public implementations // of IXmlSerializable for the Annotation object model. This would normally // be done by XmlSerializer but its slow and causes an assembly to be generated // at runtime. API-wise third-parties can still use XmlSerializer but we // choose not to for our purposes. // // History: // 08/26/2004: rruiz: Added new serializer class. // //----------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Reflection; using System.Windows.Annotations.Storage; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; using MS.Internal; namespace MS.Internal.Annotations { ////// Serializer class for Annotation object model. All entities /// in the object model implement IXmlSerializable (or are /// contained and serialized by an entity that does). This class /// does the simple boot-strapping for serializing/deserializing /// of the object model. This lets us get by without paying the /// cost of XmlSerializer (which generates a run-time assembly). /// internal class Serializer { ////// Creates an instance of the serializer for the specified type. /// We use the type to get the default constructor and the type's /// element name and namespace. This constructor expects the /// type to be attributed with XmlRootAttribute (as all serializable /// classes in the object model are). /// /// the type to be serialized by this instance public Serializer(Type type) { Invariant.Assert(type != null); // Find the XmlRootAttribute for the type object[] attributes = type.GetCustomAttributes(false); foreach (object obj in attributes) { _attribute = obj as XmlRootAttribute; if (_attribute != null) break; } Invariant.Assert(_attribute != null, "Internal Serializer used for a type with no XmlRootAttribute."); // Get the default constructor for the type _ctor = type.GetConstructor(new Type[0]); } ////// Serializes the object to the specified XmlWriter. /// /// writer to serialize to /// object to serialize public void Serialize(XmlWriter writer, object obj) { Invariant.Assert(writer != null && obj != null); IXmlSerializable serializable = obj as IXmlSerializable; Invariant.Assert(serializable != null, "Internal Serializer used for a type that isn't IXmlSerializable."); writer.WriteStartElement(_attribute.ElementName, _attribute.Namespace); serializable.WriteXml(writer); writer.WriteEndElement(); } ////// Deserializes the next object from the reader. The /// reader is expected to be positioned on a node that /// can be deserialized into the type this serializer /// was instantiated for. /// /// reader to deserialize from ///an instance of the type this serializer was instanted /// for with values retrieved from the reader public object Deserialize(XmlReader reader) { Invariant.Assert(reader != null); IXmlSerializable serializable = (IXmlSerializable)_ctor.Invoke(new object[0]); // If this is a brand-new stream we need to jump into it if (reader.ReadState == ReadState.Initial) { reader.Read(); } serializable.ReadXml(reader); return serializable; } // XmlRootAttribute - specifies the ElementName and Namespace for // the node to read/write private XmlRootAttribute _attribute; // Constructor used to create instances when deserializing private ConstructorInfo _ctor; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // Serializer performs the boot-strapping to call the public implementations // of IXmlSerializable for the Annotation object model. This would normally // be done by XmlSerializer but its slow and causes an assembly to be generated // at runtime. API-wise third-parties can still use XmlSerializer but we // choose not to for our purposes. // // History: // 08/26/2004: rruiz: Added new serializer class. // //----------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Reflection; using System.Windows.Annotations.Storage; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; using MS.Internal; namespace MS.Internal.Annotations { ////// Serializer class for Annotation object model. All entities /// in the object model implement IXmlSerializable (or are /// contained and serialized by an entity that does). This class /// does the simple boot-strapping for serializing/deserializing /// of the object model. This lets us get by without paying the /// cost of XmlSerializer (which generates a run-time assembly). /// internal class Serializer { ////// Creates an instance of the serializer for the specified type. /// We use the type to get the default constructor and the type's /// element name and namespace. This constructor expects the /// type to be attributed with XmlRootAttribute (as all serializable /// classes in the object model are). /// /// the type to be serialized by this instance public Serializer(Type type) { Invariant.Assert(type != null); // Find the XmlRootAttribute for the type object[] attributes = type.GetCustomAttributes(false); foreach (object obj in attributes) { _attribute = obj as XmlRootAttribute; if (_attribute != null) break; } Invariant.Assert(_attribute != null, "Internal Serializer used for a type with no XmlRootAttribute."); // Get the default constructor for the type _ctor = type.GetConstructor(new Type[0]); } ////// Serializes the object to the specified XmlWriter. /// /// writer to serialize to /// object to serialize public void Serialize(XmlWriter writer, object obj) { Invariant.Assert(writer != null && obj != null); IXmlSerializable serializable = obj as IXmlSerializable; Invariant.Assert(serializable != null, "Internal Serializer used for a type that isn't IXmlSerializable."); writer.WriteStartElement(_attribute.ElementName, _attribute.Namespace); serializable.WriteXml(writer); writer.WriteEndElement(); } ////// Deserializes the next object from the reader. The /// reader is expected to be positioned on a node that /// can be deserialized into the type this serializer /// was instantiated for. /// /// reader to deserialize from ///an instance of the type this serializer was instanted /// for with values retrieved from the reader public object Deserialize(XmlReader reader) { Invariant.Assert(reader != null); IXmlSerializable serializable = (IXmlSerializable)_ctor.Invoke(new object[0]); // If this is a brand-new stream we need to jump into it if (reader.ReadState == ReadState.Initial) { reader.Read(); } serializable.ReadXml(reader); return serializable; } // XmlRootAttribute - specifies the ElementName and Namespace for // the node to read/write private XmlRootAttribute _attribute; // Constructor used to create instances when deserializing private ConstructorInfo _ctor; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RtfFormatStack.cs
- PageSetupDialog.cs
- OleDbRowUpdatingEvent.cs
- DependencyProperty.cs
- WindowsGraphicsWrapper.cs
- SqlGenerator.cs
- WebBrowser.cs
- DelegateInArgument.cs
- MenuItemCollection.cs
- ProbeMatches11.cs
- DelayedRegex.cs
- TableRow.cs
- DynamicDataRoute.cs
- Walker.cs
- GlyphRunDrawing.cs
- DragDeltaEventArgs.cs
- XmlTypeMapping.cs
- OracleCommandSet.cs
- WebScriptMetadataMessageEncodingBindingElement.cs
- CodeTypeDeclaration.cs
- EndpointAddressAugust2004.cs
- DataGridComponentEditor.cs
- HierarchicalDataTemplate.cs
- NamedPermissionSet.cs
- InvokeGenerator.cs
- DataContractSerializerOperationBehavior.cs
- Image.cs
- ToggleButtonAutomationPeer.cs
- TypeToStringValueConverter.cs
- AmbientEnvironment.cs
- NestedContainer.cs
- SqlRowUpdatedEvent.cs
- BasicBrowserDialog.designer.cs
- CompilerScope.Storage.cs
- StringUtil.cs
- Vector3D.cs
- DesignerSerializerAttribute.cs
- FixedMaxHeap.cs
- Message.cs
- SoapSchemaExporter.cs
- SectionInformation.cs
- KeyedHashAlgorithm.cs
- Emitter.cs
- KeyGestureValueSerializer.cs
- _CommandStream.cs
- BoundingRectTracker.cs
- ActiveXHost.cs
- DataTableReaderListener.cs
- CodePageUtils.cs
- _NegotiateClient.cs
- XmlWrappingWriter.cs
- GroupBoxRenderer.cs
- HostingEnvironmentException.cs
- AppSettings.cs
- AssemblyResourceLoader.cs
- SqlFunctionAttribute.cs
- SimpleTypesSurrogate.cs
- UserPreferenceChangedEventArgs.cs
- XmlDomTextWriter.cs
- MaskedTextProvider.cs
- SafeEventLogReadHandle.cs
- FacetEnabledSchemaElement.cs
- KeyboardDevice.cs
- DesignerCatalogPartChrome.cs
- PlanCompilerUtil.cs
- ProcessModelInfo.cs
- Queue.cs
- BinaryFormatter.cs
- oledbmetadatacolumnnames.cs
- EditorZone.cs
- BitmapEffectRenderDataResource.cs
- PathStreamGeometryContext.cs
- DecimalStorage.cs
- AppDomainUnloadedException.cs
- PeerNameRegistration.cs
- CountAggregationOperator.cs
- Identifier.cs
- _ProxyChain.cs
- NetCodeGroup.cs
- Lock.cs
- ZipIOCentralDirectoryFileHeader.cs
- PassportPrincipal.cs
- LayoutInformation.cs
- RtfFormatStack.cs
- DesignTimeTemplateParser.cs
- XmlMapping.cs
- DropSource.cs
- XmlUtilWriter.cs
- SmiEventSink.cs
- SecurityCriticalDataForSet.cs
- xamlnodes.cs
- FixedSOMImage.cs
- ActivityDesignerResources.cs
- IIS7WorkerRequest.cs
- AuthStoreRoleProvider.cs
- ReflectTypeDescriptionProvider.cs
- ConfigXmlComment.cs
- ToolStripItemCollection.cs
- ClientSection.cs
- EpmContentDeSerializerBase.cs