Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / 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: [....]: 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
- FileDialog.cs
- HotSpotCollection.cs
- ToolBarButtonClickEvent.cs
- EllipseGeometry.cs
- TreeViewImageIndexConverter.cs
- AssemblyName.cs
- PrintPreviewDialog.cs
- BCLDebug.cs
- Comparer.cs
- AmbientLight.cs
- ADMembershipUser.cs
- ConnectionProviderAttribute.cs
- ChannelCacheDefaults.cs
- XmlHierarchicalDataSourceView.cs
- MethodRental.cs
- XmlDataLoader.cs
- SplitterPanel.cs
- MemberRestriction.cs
- HtmlContainerControl.cs
- InstanceContextManager.cs
- TabControlEvent.cs
- TableTextElementCollectionInternal.cs
- HttpRequest.cs
- ToolStripProgressBar.cs
- FilterRepeater.cs
- XmlCDATASection.cs
- GridViewCancelEditEventArgs.cs
- Utility.cs
- TemplateManager.cs
- InitializingNewItemEventArgs.cs
- mediaclock.cs
- ConnectionStringsExpressionBuilder.cs
- loginstatus.cs
- TraceContext.cs
- UserPreferenceChangingEventArgs.cs
- PriorityQueue.cs
- UnsafePeerToPeerMethods.cs
- Compiler.cs
- ManualResetEvent.cs
- ChildDocumentBlock.cs
- AssemblyBuilder.cs
- assemblycache.cs
- ErrorWebPart.cs
- SafeWaitHandle.cs
- isolationinterop.cs
- IndicShape.cs
- CaseInsensitiveOrdinalStringComparer.cs
- AtomEntry.cs
- DbProviderServices.cs
- TreeViewItem.cs
- Splitter.cs
- ExclusiveCanonicalizationTransform.cs
- SapiGrammar.cs
- BasicViewGenerator.cs
- PaintEvent.cs
- ToolStripGripRenderEventArgs.cs
- SmtpReplyReaderFactory.cs
- WindowsStatic.cs
- SQLInt32.cs
- WebPartDisplayModeCollection.cs
- ApplicationDirectory.cs
- VirtualizingPanel.cs
- ComponentConverter.cs
- DrawingContextFlattener.cs
- Encoder.cs
- PhoneCall.cs
- ScaleTransform.cs
- EntityProviderFactory.cs
- OneOf.cs
- JsonFormatReaderGenerator.cs
- RadioButtonStandardAdapter.cs
- ArglessEventHandlerProxy.cs
- SpecialNameAttribute.cs
- SqlTypesSchemaImporter.cs
- SeekStoryboard.cs
- AsymmetricSignatureFormatter.cs
- GreaterThan.cs
- COM2Properties.cs
- AdRotator.cs
- QueryOutputWriter.cs
- WebPartRestoreVerb.cs
- WindowsFont.cs
- WebRequestModuleElementCollection.cs
- Setter.cs
- AlternateViewCollection.cs
- XmlSerializerAssemblyAttribute.cs
- userdatakeys.cs
- PermissionRequestEvidence.cs
- Stylesheet.cs
- EdmComplexPropertyAttribute.cs
- OleStrCAMarshaler.cs
- Transactions.cs
- MessageOperationFormatter.cs
- IpcServerChannel.cs
- DataTransferEventArgs.cs
- OutputCacheSettings.cs
- WinFormsSpinner.cs
- GeometryHitTestResult.cs
- DataSourceControl.cs
- WindowsImpersonationContext.cs