Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FormsAuthenticationEventArgs.cs
- VSWCFServiceContractGenerator.cs
- OutputScope.cs
- NameValueSectionHandler.cs
- HebrewNumber.cs
- TextParagraphCache.cs
- DoubleStorage.cs
- NamespaceEmitter.cs
- ChangeNode.cs
- CleanUpVirtualizedItemEventArgs.cs
- DockPatternIdentifiers.cs
- MulticastNotSupportedException.cs
- UserUseLicenseDictionaryLoader.cs
- DBConcurrencyException.cs
- UtilityExtension.cs
- RouteValueExpressionBuilder.cs
- EventRoute.cs
- StreamGeometryContext.cs
- ListViewGroupConverter.cs
- OutputScopeManager.cs
- CreateUserWizard.cs
- ReflectPropertyDescriptor.cs
- ScriptIgnoreAttribute.cs
- EmptyCollection.cs
- Point3D.cs
- Label.cs
- PersistenceException.cs
- Encoder.cs
- CommandDesigner.cs
- EventListenerClientSide.cs
- DragCompletedEventArgs.cs
- Pen.cs
- OleDbRowUpdatedEvent.cs
- XmlToDatasetMap.cs
- DataServiceHost.cs
- BezierSegment.cs
- DataContext.cs
- SqlParameter.cs
- SemanticKeyElement.cs
- ReadOnlyHierarchicalDataSource.cs
- CapabilitiesState.cs
- Figure.cs
- IsolatedStorageSecurityState.cs
- NavigationWindow.cs
- InlineCollection.cs
- smtpconnection.cs
- CompilationLock.cs
- DiscoveryClientElement.cs
- WindowsListViewGroupHelper.cs
- WebHostScriptMappingsInstallComponent.cs
- ProtocolsSection.cs
- ComponentEvent.cs
- MeasureItemEvent.cs
- TrackingStringDictionary.cs
- SettingsContext.cs
- HwndSubclass.cs
- ToolBarTray.cs
- Evidence.cs
- Activity.cs
- RuleAction.cs
- TextEditorTables.cs
- RowParagraph.cs
- TextComposition.cs
- DataGridViewLinkCell.cs
- DataGridViewElement.cs
- ErasingStroke.cs
- RuleSettings.cs
- TextRange.cs
- JavaScriptSerializer.cs
- LateBoundBitmapDecoder.cs
- CdpEqualityComparer.cs
- DiscoveryReference.cs
- _OSSOCK.cs
- TextLineResult.cs
- BindingCompleteEventArgs.cs
- future.cs
- OracleColumn.cs
- _BasicClient.cs
- SafeLocalMemHandle.cs
- Currency.cs
- BufferedWebEventProvider.cs
- XmlElementElement.cs
- WindowInteropHelper.cs
- TextWriterTraceListener.cs
- EditorPartChrome.cs
- ModelVisual3D.cs
- DrawingImage.cs
- StrongNameUtility.cs
- XsltConvert.cs
- BitConverter.cs
- SqlMethodCallConverter.cs
- DetailsViewUpdateEventArgs.cs
- DataMemberConverter.cs
- ConfigurationManagerHelperFactory.cs
- ClientTargetCollection.cs
- SrgsDocumentParser.cs
- SymLanguageType.cs
- SchemaNamespaceManager.cs
- IntegrationExceptionEventArgs.cs
- ComponentEditorPage.cs