Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- Parallel.cs
- Normalization.cs
- manifestimages.cs
- ActiveXSite.cs
- SiteMapHierarchicalDataSourceView.cs
- MediaElementAutomationPeer.cs
- AccessorTable.cs
- HtmlWindow.cs
- FilterException.cs
- CanonicalFormWriter.cs
- Errors.cs
- MeasurementDCInfo.cs
- RuntimeEnvironment.cs
- ScriptComponentDescriptor.cs
- ForceCopyBuildProvider.cs
- SqlDataSourceConfigureSortForm.cs
- RuntimeConfig.cs
- PropertyGroupDescription.cs
- Command.cs
- FlowLayoutPanel.cs
- NaturalLanguageHyphenator.cs
- PropertyGeneratedEventArgs.cs
- FrameSecurityDescriptor.cs
- SQLUtility.cs
- ShutDownListener.cs
- RoutedEventHandlerInfo.cs
- Bitmap.cs
- RemoteWebConfigurationHostStream.cs
- DataGridViewColumnConverter.cs
- brushes.cs
- ApplicationHost.cs
- SimpleType.cs
- QueueSurrogate.cs
- SQLInt16.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- Parser.cs
- ElementFactory.cs
- Geometry.cs
- RepeaterItemCollection.cs
- SendAgentStatusRequest.cs
- DispatcherTimer.cs
- WithStatement.cs
- TraceHandlerErrorFormatter.cs
- CompatibleComparer.cs
- oledbmetadatacollectionnames.cs
- BasicViewGenerator.cs
- XmlILConstructAnalyzer.cs
- BuilderInfo.cs
- InternalBufferOverflowException.cs
- ListControlConvertEventArgs.cs
- XmlQueryRuntime.cs
- WebResourceAttribute.cs
- LinkLabelLinkClickedEvent.cs
- PopupControlService.cs
- Compilation.cs
- DocumentOrderComparer.cs
- FrameworkContentElement.cs
- FieldMetadata.cs
- _HelperAsyncResults.cs
- FieldNameLookup.cs
- ToolStripActionList.cs
- MultiTrigger.cs
- ClrPerspective.cs
- ToolStripSplitStackLayout.cs
- CategoryAttribute.cs
- AmbiguousMatchException.cs
- TextSelectionProcessor.cs
- IndentedWriter.cs
- DataObjectFieldAttribute.cs
- DelegatingStream.cs
- SqlMethodTransformer.cs
- WebPartConnectionsCancelEventArgs.cs
- IndependentlyAnimatedPropertyMetadata.cs
- HttpRequestCacheValidator.cs
- DesignerObject.cs
- XmlSchemaFacet.cs
- ColorPalette.cs
- ReliabilityContractAttribute.cs
- IdentifierCollection.cs
- StyleHelper.cs
- TextTrailingWordEllipsis.cs
- SortableBindingList.cs
- ServiceCredentials.cs
- SettingsBindableAttribute.cs
- SizeConverter.cs
- XmlSchemaFacet.cs
- ListSortDescriptionCollection.cs
- Win32Native.cs
- DatatypeImplementation.cs
- LOSFormatter.cs
- BinaryObjectReader.cs
- SoapMessage.cs
- TypeSystem.cs
- Visual3D.cs
- DataSetMappper.cs
- GregorianCalendarHelper.cs
- MenuBase.cs
- XmlMtomReader.cs
- InvokePattern.cs
- AuthStoreRoleProvider.cs