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
- FileUpload.cs
- StrokeCollection.cs
- WsdlWriter.cs
- DescendentsWalkerBase.cs
- XmlSchemaException.cs
- AvTraceDetails.cs
- AppSettingsExpressionBuilder.cs
- PassportAuthentication.cs
- SpellerStatusTable.cs
- FastEncoderWindow.cs
- HttpGetClientProtocol.cs
- UserPersonalizationStateInfo.cs
- Simplifier.cs
- DetailsViewUpdatedEventArgs.cs
- XamlClipboardData.cs
- FilterInvalidBodyAccessException.cs
- KeyToListMap.cs
- ConnectionsZone.cs
- FileLoadException.cs
- LiteralText.cs
- LinkedResource.cs
- ApplicationFileCodeDomTreeGenerator.cs
- HMACSHA384.cs
- ProfilePropertySettingsCollection.cs
- DataSourceProvider.cs
- DesignerRegionCollection.cs
- WhiteSpaceTrimStringConverter.cs
- ConnectionManagementElementCollection.cs
- ObjectDataSourceView.cs
- UpdateException.cs
- TagMapInfo.cs
- RuleRef.cs
- TimeoutException.cs
- UnsafeNativeMethods.cs
- ADMembershipProvider.cs
- GridViewColumnHeaderAutomationPeer.cs
- DelegateBodyWriter.cs
- ProcessHostServerConfig.cs
- SQLConvert.cs
- ApplicationCommands.cs
- BamlReader.cs
- ProcessModule.cs
- ImageCodecInfo.cs
- FloaterBaseParagraph.cs
- StringPropertyBuilder.cs
- BaseResourcesBuildProvider.cs
- ContextMenuService.cs
- TextDecoration.cs
- SecurityDocument.cs
- HttpRuntime.cs
- TransformationRules.cs
- XmlElementAttribute.cs
- SyntaxCheck.cs
- ExpressionLexer.cs
- DbConnectionInternal.cs
- CultureInfoConverter.cs
- WmlObjectListAdapter.cs
- RefType.cs
- HttpRuntime.cs
- Duration.cs
- RealProxy.cs
- DataGridColumnFloatingHeader.cs
- AppliedDeviceFiltersDialog.cs
- AstNode.cs
- SettingsPropertyValueCollection.cs
- IndexedString.cs
- CancelRequestedQuery.cs
- DataControlPagerLinkButton.cs
- HGlobalSafeHandle.cs
- ConnectionsZone.cs
- Scripts.cs
- RoleExceptions.cs
- SelectiveScrollingGrid.cs
- SmtpMail.cs
- FormsAuthenticationModule.cs
- AnonymousIdentificationSection.cs
- XmlCollation.cs
- Label.cs
- ErrorTableItemStyle.cs
- StoreContentChangedEventArgs.cs
- Content.cs
- Timeline.cs
- WeakReference.cs
- ErrorLog.cs
- CodeNamespace.cs
- MetadataSerializer.cs
- SemaphoreSecurity.cs
- PageThemeBuildProvider.cs
- OleDbMetaDataFactory.cs
- VersionValidator.cs
- MemoryMappedViewAccessor.cs
- DependencyPropertyConverter.cs
- Pair.cs
- NativeMethods.cs
- FilteredDataSetHelper.cs
- DatagridviewDisplayedBandsData.cs
- ApplicationFileCodeDomTreeGenerator.cs
- XmlSerializerSection.cs
- ReferencedCollectionType.cs
- PropertiesTab.cs