Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Text / MLangCodePageEncoding.cs / 1 / MLangCodePageEncoding.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
// WARNING:
//
// This is just an IObjectReference proxy for the former MLang Encodings (V1.1)
// We keep the old name now even for the Whidbey V2.0 IObjectReference because it also
// works with the Everett V1.1 version.
namespace System.Text
{
using System;
using System.Runtime.Serialization;
using System.Security.Permissions;
/*=================================MLangCodePageEncoding==================================
** This class is here only to deserialize the MLang classes from Everett (V1.1) into
** Appropriate Whidbey (V2.0) objects. We also serialize the Whidbey classes
** using this proxy since we pretty much need one anyway and that solves Whidbey
** to Everett compatibility as well.
==============================================================================*/
[Serializable()]
internal sealed class MLangCodePageEncoding : ISerializable, IObjectReference
{
// Temp stuff
[NonSerialized]
private int m_codePage;
[NonSerialized]
private bool m_isReadOnly;
[NonSerialized]
private bool m_deserializedFromEverett = false;
[NonSerialized]
private EncoderFallback encoderFallback = null;
[NonSerialized]
private DecoderFallback decoderFallback = null;
// Might need this when GetRealObjecting
[NonSerialized]
private Encoding realEncoding = null;
// Constructor called by serialization.
internal MLangCodePageEncoding(SerializationInfo info, StreamingContext context)
{
// Any info?
if (info==null) throw new ArgumentNullException("info");
// All versions have a code page
this.m_codePage = (int)info.GetValue("m_codePage", typeof(int));
// See if we have a code page
try
{
//
// Try Whidbey V2.0 Fields
//
this.m_isReadOnly = (bool)info.GetValue("m_isReadOnly", typeof(bool));
this.encoderFallback = (EncoderFallback)info.GetValue("encoderFallback", typeof(EncoderFallback));
this.decoderFallback = (DecoderFallback)info.GetValue("decoderFallback", typeof(DecoderFallback));
}
catch (SerializationException)
{
//
// Didn't have Whidbey things, must be Everett
//
this.m_deserializedFromEverett = true;
// May as well be read only
this.m_isReadOnly = true;
}
}
// Just get it from GetEncoding
public Object GetRealObject(StreamingContext context)
{
// Get our encoding (Note: This has default fallbacks for readonly and everett cases)
this.realEncoding = Encoding.GetEncoding(this.m_codePage);
// If its read only then it uses default fallbacks, otherwise pick up the new ones
// Otherwise we want to leave the new one read only
if (!this.m_deserializedFromEverett && !this.m_isReadOnly)
{
this.realEncoding = (Encoding)this.realEncoding.Clone();
this.realEncoding.EncoderFallback = this.encoderFallback;
this.realEncoding.DecoderFallback = this.decoderFallback;
}
return this.realEncoding;
}
// ISerializable implementation
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
// We cannot ever call this.
BCLDebug.Assert(false, "Didn't expect to make it to MLangCodePageEncoding ISerializable.GetObjectData");
throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException")); }
// Same problem with the Encoder, this only happens with Everett Encoders
[Serializable]
internal sealed class MLangEncoder : ISerializable, IObjectReference
{
// Might need this when GetRealObjecting
[NonSerialized]
private Encoding realEncoding = null;
// Constructor called by serialization, have to handle deserializing from Everett
internal MLangEncoder(SerializationInfo info, StreamingContext context)
{
// Any info?
if (info==null) throw new ArgumentNullException("info");
this.realEncoding = (Encoding)info.GetValue("m_encoding", typeof(Encoding));
}
// Just get it from GetEncoder
public Object GetRealObject(StreamingContext context)
{
return this.realEncoding.GetEncoder();
}
// ISerializable implementation, get data for this object
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
// We cannot ever call this.
BCLDebug.Assert(false, "Didn't expect to make it to MLangCodePageEncoding.MLangEncoder.GetObjectData");
throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
}
}
// Same problem with the Decoder, this only happens with Everett Decoders
[Serializable]
internal sealed class MLangDecoder : ISerializable, IObjectReference
{
// Might need this when GetRealObjecting
[NonSerialized]
private Encoding realEncoding = null;
// Constructor called by serialization, have to handle deserializing from Everett
internal MLangDecoder(SerializationInfo info, StreamingContext context)
{
// Any info?
if (info==null) throw new ArgumentNullException("info");
this.realEncoding = (Encoding)info.GetValue("m_encoding", typeof(Encoding));
}
// Just get it from GetDecoder
public Object GetRealObject(StreamingContext context)
{
return this.realEncoding.GetDecoder();
}
// ISerializable implementation, get data for this object
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
// We cannot ever call this.
BCLDebug.Assert(false, "Didn't expect to make it to MLangCodePageEncoding.MLangDecoder.GetObjectData");
throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
}
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StorageEntityContainerMapping.cs
- Utility.cs
- EdmItemCollection.OcAssemblyCache.cs
- CompilationSection.cs
- SqlClientFactory.cs
- QuadraticBezierSegment.cs
- DataQuery.cs
- EntityCodeGenerator.cs
- X500Name.cs
- PropertyValueUIItem.cs
- RsaSecurityToken.cs
- DataGridViewRowHeaderCell.cs
- XmlSchemaCollection.cs
- TextTreeUndo.cs
- SizeF.cs
- TimeoutConverter.cs
- DataGridTable.cs
- FontEditor.cs
- XmlConverter.cs
- ConfigXmlSignificantWhitespace.cs
- SessionStateModule.cs
- RowToParametersTransformer.cs
- Effect.cs
- SelectionUIHandler.cs
- URLAttribute.cs
- AsyncDataRequest.cs
- AsyncCodeActivity.cs
- PersonalizationEntry.cs
- util.cs
- PropertyFilterAttribute.cs
- DataGridColumn.cs
- UnaryNode.cs
- XmlUnspecifiedAttribute.cs
- JsonSerializer.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- MultidimensionalArrayItemReference.cs
- Attributes.cs
- SimpleHandlerBuildProvider.cs
- RepeatBehaviorConverter.cs
- translator.cs
- DataGridViewComboBoxEditingControl.cs
- ResourceCodeDomSerializer.cs
- CodeCatchClauseCollection.cs
- UIElementHelper.cs
- Message.cs
- QuaternionAnimation.cs
- Attributes.cs
- FragmentQuery.cs
- Compiler.cs
- SamlAudienceRestrictionCondition.cs
- XmlSerializerNamespaces.cs
- SessionStateItemCollection.cs
- TabControlCancelEvent.cs
- StrokeDescriptor.cs
- XappLauncher.cs
- InitializerFacet.cs
- SoapIgnoreAttribute.cs
- XsdBuilder.cs
- ListenDesigner.cs
- ContextMenu.cs
- AdRotator.cs
- PointCollection.cs
- ListMarkerLine.cs
- securitycriticaldataformultiplegetandset.cs
- Cursor.cs
- DataAdapter.cs
- ProfileEventArgs.cs
- ContentElement.cs
- CacheHelper.cs
- ArraySegment.cs
- JsonDeserializer.cs
- TransformerConfigurationWizardBase.cs
- XPathArrayIterator.cs
- KeyBinding.cs
- XmlAnyAttributeAttribute.cs
- LassoHelper.cs
- DataGridCommandEventArgs.cs
- Wildcard.cs
- Splitter.cs
- MetabaseSettingsIis7.cs
- Win32.cs
- HttpModuleActionCollection.cs
- DataTemplateKey.cs
- EventProviderClassic.cs
- HasCopySemanticsAttribute.cs
- ZipIOBlockManager.cs
- PathFigureCollection.cs
- MarshalByRefObject.cs
- PersonalizableTypeEntry.cs
- PropertyEmitterBase.cs
- InputMethodStateChangeEventArgs.cs
- TreeNodeMouseHoverEvent.cs
- BuildProviderUtils.cs
- BooleanSwitch.cs
- DataGridViewCellStyle.cs
- BackgroundFormatInfo.cs
- COM2Properties.cs
- Normalization.cs
- AccessText.cs
- IDispatchConstantAttribute.cs