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
- HtmlValidationSummaryAdapter.cs
- UInt32.cs
- StrokeSerializer.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- TreeViewCancelEvent.cs
- _KerberosClient.cs
- TraceRecords.cs
- DataGridColumnCollection.cs
- StaticResourceExtension.cs
- ResourceContainer.cs
- DateTimeOffset.cs
- XmlTextReaderImplHelpers.cs
- control.ime.cs
- DateTimeOffset.cs
- ContentElement.cs
- TraceHandlerErrorFormatter.cs
- ManagedWndProcTracker.cs
- StringFreezingAttribute.cs
- ColorKeyFrameCollection.cs
- ListViewInsertEventArgs.cs
- ManagedWndProcTracker.cs
- CodePrimitiveExpression.cs
- StateBag.cs
- ToolStripControlHost.cs
- RawStylusInputReport.cs
- WindowsListViewSubItem.cs
- FontNamesConverter.cs
- SkipQueryOptionExpression.cs
- InvalidDataContractException.cs
- WebPartCollection.cs
- InkCanvasAutomationPeer.cs
- HuffCodec.cs
- AvTrace.cs
- BufferedMessageData.cs
- DataGridColumnHeaderItemAutomationPeer.cs
- ActiveXSite.cs
- Helper.cs
- IsolatedStorageFile.cs
- FileInfo.cs
- ParameterElementCollection.cs
- CacheRequest.cs
- InternalControlCollection.cs
- GACIdentityPermission.cs
- EntityConnectionStringBuilder.cs
- RTTrackingProfile.cs
- QueryConverter.cs
- StringSorter.cs
- NetDispatcherFaultException.cs
- RadioButtonRenderer.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- ListCommandEventArgs.cs
- DrawingContext.cs
- WebPartTransformer.cs
- MutexSecurity.cs
- SessionStateUtil.cs
- DropAnimation.xaml.cs
- ConfigXmlAttribute.cs
- TextEditorContextMenu.cs
- SystemPens.cs
- Point.cs
- SqlParameter.cs
- QuaternionRotation3D.cs
- UnsafeNativeMethods.cs
- ButtonRenderer.cs
- TimestampInformation.cs
- BlockUIContainer.cs
- DbConnectionPoolGroupProviderInfo.cs
- oledbconnectionstring.cs
- Label.cs
- TraceProvider.cs
- TrackPoint.cs
- DataBoundControlHelper.cs
- ExitEventArgs.cs
- LayoutInformation.cs
- QilGenerator.cs
- TransformCryptoHandle.cs
- XmlTypeMapping.cs
- _NegotiateClient.cs
- FixedSOMGroup.cs
- ProtocolsConfiguration.cs
- Int32KeyFrameCollection.cs
- XmlEntity.cs
- InstanceOwnerQueryResult.cs
- AttributeQuery.cs
- SqlServer2KCompatibilityCheck.cs
- FramingFormat.cs
- InputLanguage.cs
- Debug.cs
- JournalEntryListConverter.cs
- ComplexPropertyEntry.cs
- WebRequestModulesSection.cs
- RegexTypeEditor.cs
- IisTraceWebEventProvider.cs
- SapiRecognizer.cs
- DbProviderFactories.cs
- mediaeventargs.cs
- GridView.cs
- TypeElement.cs
- HandleRef.cs
- ByteStack.cs