Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / Json / JsonEnumDataContract.cs / 1305376 / JsonEnumDataContract.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Runtime.Serialization.Json { using System.Xml; using System.Security; class JsonEnumDataContract : JsonDataContract { [Fx.Tag.SecurityNote(Critical = "Holds instance of CriticalHelper which keeps state that is cached statically for serialization." + "Static fields are marked SecurityCritical or readonly to prevent data from being modified or leaked to other components in appdomain.")] [SecurityCritical] JsonEnumDataContractCriticalHelper helper; [Fx.Tag.SecurityNote(Critical = "Initializes SecurityCritical field 'helper'.", Safe = "Doesn't leak anything.")] [SecuritySafeCritical] public JsonEnumDataContract(EnumDataContract traditionalDataContract) : base(new JsonEnumDataContractCriticalHelper(traditionalDataContract)) { this.helper = base.Helper as JsonEnumDataContractCriticalHelper; } public bool IsULong { [Fx.Tag.SecurityNote(Critical = "Fetches the critical IsULong property.", Safe = "IsULong only needs to be protected for write.")] [SecuritySafeCritical] get { return this.helper.IsULong; } } public override object ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) { object enumValue; if (IsULong) { enumValue = Enum.ToObject(TraditionalDataContract.UnderlyingType, jsonReader.ReadElementContentAsUnsignedLong()); } else { enumValue = Enum.ToObject(TraditionalDataContract.UnderlyingType, jsonReader.ReadElementContentAsLong()); } if (context != null) { context.AddNewObject(enumValue); } return enumValue; } public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle) { if (IsULong) { jsonWriter.WriteUnsignedLong(((IConvertible) obj).ToUInt64(null)); } else { jsonWriter.WriteLong(((IConvertible) obj).ToInt64(null)); } } [Fx.Tag.SecurityNote(Critical = "Holds all state used for (de)serializing types." + "Since the data is cached statically, we lock down access to it.")] #pragma warning disable 618 // have not moved to the v4 security model yet [SecurityCritical(SecurityCriticalScope.Everything)] #pragma warning restore 618 class JsonEnumDataContractCriticalHelper : JsonDataContractCriticalHelper { bool isULong; public JsonEnumDataContractCriticalHelper(EnumDataContract traditionalEnumDataContract) : base(traditionalEnumDataContract) { isULong = traditionalEnumDataContract.IsULong; } public bool IsULong { get { return this.isULong; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Runtime.Serialization.Json { using System.Xml; using System.Security; class JsonEnumDataContract : JsonDataContract { [Fx.Tag.SecurityNote(Critical = "Holds instance of CriticalHelper which keeps state that is cached statically for serialization." + "Static fields are marked SecurityCritical or readonly to prevent data from being modified or leaked to other components in appdomain.")] [SecurityCritical] JsonEnumDataContractCriticalHelper helper; [Fx.Tag.SecurityNote(Critical = "Initializes SecurityCritical field 'helper'.", Safe = "Doesn't leak anything.")] [SecuritySafeCritical] public JsonEnumDataContract(EnumDataContract traditionalDataContract) : base(new JsonEnumDataContractCriticalHelper(traditionalDataContract)) { this.helper = base.Helper as JsonEnumDataContractCriticalHelper; } public bool IsULong { [Fx.Tag.SecurityNote(Critical = "Fetches the critical IsULong property.", Safe = "IsULong only needs to be protected for write.")] [SecuritySafeCritical] get { return this.helper.IsULong; } } public override object ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) { object enumValue; if (IsULong) { enumValue = Enum.ToObject(TraditionalDataContract.UnderlyingType, jsonReader.ReadElementContentAsUnsignedLong()); } else { enumValue = Enum.ToObject(TraditionalDataContract.UnderlyingType, jsonReader.ReadElementContentAsLong()); } if (context != null) { context.AddNewObject(enumValue); } return enumValue; } public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle) { if (IsULong) { jsonWriter.WriteUnsignedLong(((IConvertible) obj).ToUInt64(null)); } else { jsonWriter.WriteLong(((IConvertible) obj).ToInt64(null)); } } [Fx.Tag.SecurityNote(Critical = "Holds all state used for (de)serializing types." + "Since the data is cached statically, we lock down access to it.")] #pragma warning disable 618 // have not moved to the v4 security model yet [SecurityCritical(SecurityCriticalScope.Everything)] #pragma warning restore 618 class JsonEnumDataContractCriticalHelper : JsonDataContractCriticalHelper { bool isULong; public JsonEnumDataContractCriticalHelper(EnumDataContract traditionalEnumDataContract) : base(traditionalEnumDataContract) { isULong = traditionalEnumDataContract.IsULong; } public bool IsULong { get { return this.isULong; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EmptyStringExpandableObjectConverter.cs
- GridViewAutomationPeer.cs
- AppSettingsReader.cs
- IndexOutOfRangeException.cs
- XPathNodeList.cs
- ReferenceTypeElement.cs
- RequestBringIntoViewEventArgs.cs
- SqlDataSourceQuery.cs
- DesignerContextDescriptor.cs
- QilReference.cs
- XhtmlBasicControlAdapter.cs
- DefaultValueTypeConverter.cs
- BitmapSizeOptions.cs
- MetadataUtil.cs
- SmiEventSink_DeferedProcessing.cs
- UIPropertyMetadata.cs
- CalculatedColumn.cs
- SpeechAudioFormatInfo.cs
- ModelVisual3D.cs
- MethodBuilder.cs
- HighlightVisual.cs
- ExpandableObjectConverter.cs
- StrongTypingException.cs
- HttpDictionary.cs
- OracleInternalConnection.cs
- DataObjectAttribute.cs
- DiscoveryServiceExtension.cs
- ResXDataNode.cs
- SortableBindingList.cs
- SymbolMethod.cs
- PathGeometry.cs
- CompositionTarget.cs
- base64Transforms.cs
- Rules.cs
- DataGridViewCellCollection.cs
- TrackBarRenderer.cs
- UserPreferenceChangingEventArgs.cs
- NeutralResourcesLanguageAttribute.cs
- DateTimeConverter2.cs
- GridView.cs
- RandomNumberGenerator.cs
- StructuralType.cs
- GridViewHeaderRowPresenter.cs
- TransformerConfigurationWizardBase.cs
- XmlCharType.cs
- MultiView.cs
- ScriptIgnoreAttribute.cs
- RepeatInfo.cs
- ExtensionDataObject.cs
- SmtpLoginAuthenticationModule.cs
- XmlSchemaAny.cs
- RuntimeWrappedException.cs
- Stroke2.cs
- ECDiffieHellmanCngPublicKey.cs
- basenumberconverter.cs
- ListViewInsertedEventArgs.cs
- TemplateControl.cs
- EditorPart.cs
- XmlNodeWriter.cs
- SecurityUtils.cs
- ReliabilityContractAttribute.cs
- PropertySet.cs
- XmlLinkedNode.cs
- AstTree.cs
- SqlReferenceCollection.cs
- _UncName.cs
- EmptyStringExpandableObjectConverter.cs
- ThousandthOfEmRealDoubles.cs
- InkCollectionBehavior.cs
- DrawingServices.cs
- SemaphoreFullException.cs
- WasEndpointConfigContainer.cs
- State.cs
- RequestCacheManager.cs
- ComboBox.cs
- ValidatorUtils.cs
- RemotingAttributes.cs
- FilterableAttribute.cs
- CollectionDataContractAttribute.cs
- Console.cs
- ResourceSet.cs
- PieceDirectory.cs
- DesignBinding.cs
- Latin1Encoding.cs
- FontSizeConverter.cs
- ProcessHostConfigUtils.cs
- ConfigurationSectionGroupCollection.cs
- RotationValidation.cs
- BinaryObjectReader.cs
- XmlMtomWriter.cs
- ZipIOCentralDirectoryFileHeader.cs
- ApplicationFileCodeDomTreeGenerator.cs
- ContainerUtilities.cs
- RoutedPropertyChangedEventArgs.cs
- Stackframe.cs
- XmlCharCheckingWriter.cs
- SocketAddress.cs
- ElementNotAvailableException.cs
- LinkedResource.cs
- TextEditor.cs