Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- DebugView.cs
- SignedXml.cs
- RoleManagerSection.cs
- Context.cs
- SplineKeyFrames.cs
- DesignerUtility.cs
- ClonableStack.cs
- TriggerCollection.cs
- SSmlParser.cs
- DataGridRow.cs
- LinqDataSourceValidationException.cs
- DecimalSumAggregationOperator.cs
- CookieProtection.cs
- ControlPager.cs
- TextTreeText.cs
- QilInvokeEarlyBound.cs
- CrossSiteScriptingValidation.cs
- SingleObjectCollection.cs
- SystemException.cs
- ComNativeDescriptor.cs
- ContentControl.cs
- TextModifier.cs
- XmlException.cs
- ConfigurationLocationCollection.cs
- AuthenticationModuleElementCollection.cs
- UrlRoutingHandler.cs
- StatusBarAutomationPeer.cs
- Encoder.cs
- NativeBuffer.cs
- RegistryHandle.cs
- EndSelectCardRequest.cs
- IncrementalCompileAnalyzer.cs
- ClientUtils.cs
- ChannelToken.cs
- ValidationRuleCollection.cs
- DependencyObjectCodeDomSerializer.cs
- DesignerHelpers.cs
- TreeViewDataItemAutomationPeer.cs
- KeyboardEventArgs.cs
- SiteMembershipCondition.cs
- SafeRightsManagementSessionHandle.cs
- RijndaelManagedTransform.cs
- ApplicationSettingsBase.cs
- versioninfo.cs
- TableParaClient.cs
- FontCollection.cs
- CompatibleComparer.cs
- DrawingGroup.cs
- DbDataRecord.cs
- ApplicationInfo.cs
- DbConnectionInternal.cs
- CatalogPartChrome.cs
- DataServiceKeyAttribute.cs
- WebPartCatalogAddVerb.cs
- DefaultDiscoveryServiceExtension.cs
- AutomationElementCollection.cs
- _ProxyChain.cs
- DesignerContextDescriptor.cs
- TimelineGroup.cs
- ServiceOperationInvoker.cs
- NullReferenceException.cs
- DbConnectionPoolCounters.cs
- ArraySegment.cs
- CheckBoxPopupAdapter.cs
- DocumentPageHost.cs
- X509SecurityTokenProvider.cs
- Rotation3DKeyFrameCollection.cs
- TreeNodeBindingDepthConverter.cs
- FrameworkReadOnlyPropertyMetadata.cs
- sapiproxy.cs
- Geometry.cs
- ImageList.cs
- FileRecordSequenceCompletedAsyncResult.cs
- Button.cs
- TypeConverter.cs
- XmlMtomReader.cs
- SignatureGenerator.cs
- CacheOutputQuery.cs
- ShaperBuffers.cs
- DependencyObjectPropertyDescriptor.cs
- DateTimeValueSerializerContext.cs
- MediaElement.cs
- DataGridViewComboBoxEditingControl.cs
- IndexerNameAttribute.cs
- SerializableAttribute.cs
- TypeConverter.cs
- SqlProviderManifest.cs
- ObjectTag.cs
- HtmlEmptyTagControlBuilder.cs
- QilInvokeLateBound.cs
- Pointer.cs
- AbsoluteQuery.cs
- reliableinputsessionchannel.cs
- HttpSessionStateWrapper.cs
- safesecurityhelperavalon.cs
- Object.cs
- Site.cs
- InternalConfigRoot.cs
- BoundPropertyEntry.cs
- AesCryptoServiceProvider.cs