Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / MS / Internal / Annotations / Serializer.cs / 1 / 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
- PaperSize.cs
- EditingScope.cs
- XmlChoiceIdentifierAttribute.cs
- RightsManagementEncryptionTransform.cs
- OptionUsage.cs
- TextTrailingWordEllipsis.cs
- SqlOuterApplyReducer.cs
- SchemaImporterExtensionsSection.cs
- SessionStateItemCollection.cs
- ModuleBuilderData.cs
- UInt16Storage.cs
- TcpChannelHelper.cs
- HttpHandlersSection.cs
- MSAAWinEventWrap.cs
- CleanUpVirtualizedItemEventArgs.cs
- SqlDataReaderSmi.cs
- QuadraticBezierSegment.cs
- SchemaSetCompiler.cs
- NamespaceEmitter.cs
- ZipIOLocalFileBlock.cs
- FormatVersion.cs
- GridViewPageEventArgs.cs
- EntitySetBase.cs
- DataGridCell.cs
- DeploymentExceptionMapper.cs
- RegistrySecurity.cs
- Int64AnimationBase.cs
- InvokeWebServiceDesigner.cs
- ServiceHostingEnvironmentSection.cs
- GPRECT.cs
- DBDataPermission.cs
- CultureTableRecord.cs
- WindowsSolidBrush.cs
- RunInstallerAttribute.cs
- Executor.cs
- PaintValueEventArgs.cs
- HtmlInputHidden.cs
- ConfigurationException.cs
- ScrollBarAutomationPeer.cs
- ElementHostPropertyMap.cs
- SystemIPInterfaceProperties.cs
- CombinedGeometry.cs
- QueryHandler.cs
- UTF7Encoding.cs
- xmlfixedPageInfo.cs
- translator.cs
- DetailsViewModeEventArgs.cs
- Int32CAMarshaler.cs
- UrlAuthorizationModule.cs
- ColorDialog.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- StrongNameKeyPair.cs
- XmlSchemaDatatype.cs
- RegexReplacement.cs
- PackWebRequest.cs
- TextDecorations.cs
- OdbcEnvironment.cs
- PersonalizablePropertyEntry.cs
- XmlAnyAttributeAttribute.cs
- DataBindEngine.cs
- Version.cs
- ControlPersister.cs
- TdsParserStateObject.cs
- RowType.cs
- unsafeIndexingFilterStream.cs
- StringOutput.cs
- ObjectSelectorEditor.cs
- PreviewPrintController.cs
- MobileControlsSectionHelper.cs
- PropertyPathWorker.cs
- IPGlobalProperties.cs
- SemanticResolver.cs
- xdrvalidator.cs
- Int16.cs
- ResXBuildProvider.cs
- InputLanguageEventArgs.cs
- WindowCollection.cs
- ReadOnlyPermissionSet.cs
- RegexCapture.cs
- FlowLayoutPanel.cs
- LateBoundChannelParameterCollection.cs
- ByteFacetDescriptionElement.cs
- PolicyStatement.cs
- ProtocolViolationException.cs
- CriticalFinalizerObject.cs
- ReliableChannelListener.cs
- UInt64Converter.cs
- ProxyHelper.cs
- HtmlEncodedRawTextWriter.cs
- DiscoveryEndpointElement.cs
- PresentationSource.cs
- SqlDelegatedTransaction.cs
- FileChangeNotifier.cs
- DesignerProperties.cs
- DataGridViewBindingCompleteEventArgs.cs
- NetTcpSection.cs
- Int32RectValueSerializer.cs
- SiteMapSection.cs
- InputMethodStateChangeEventArgs.cs
- LogAppendAsyncResult.cs