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
- PointAnimation.cs
- FormViewRow.cs
- URIFormatException.cs
- XmlnsDictionary.cs
- Documentation.cs
- PathParser.cs
- LinkClickEvent.cs
- InvalidCommandTreeException.cs
- TextEditorSpelling.cs
- CodeMemberEvent.cs
- IgnoreFileBuildProvider.cs
- BitmapMetadataEnumerator.cs
- RadioButton.cs
- StringFunctions.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- PackageDigitalSignatureManager.cs
- Inline.cs
- EnterpriseServicesHelper.cs
- FastPropertyAccessor.cs
- HtmlTable.cs
- webbrowsersite.cs
- login.cs
- Pen.cs
- EntityDataReader.cs
- RadioButtonFlatAdapter.cs
- MediaPlayerState.cs
- TemplatedMailWebEventProvider.cs
- WindowsFormsSynchronizationContext.cs
- TextAnchor.cs
- HttpModuleAction.cs
- Line.cs
- Atom10FeedFormatter.cs
- DefaultEvaluationContext.cs
- OpenCollectionAsyncResult.cs
- CollectionViewGroupInternal.cs
- IImplicitResourceProvider.cs
- BaseEntityWrapper.cs
- Inflater.cs
- WebBrowserHelper.cs
- CryptoConfig.cs
- CustomAssemblyResolver.cs
- XmlWrappingWriter.cs
- IdentityManager.cs
- SafePEFileHandle.cs
- ComboBoxItem.cs
- CssClassPropertyAttribute.cs
- PeerCustomResolverBindingElement.cs
- DrawingImage.cs
- AdCreatedEventArgs.cs
- XmlSchemaGroup.cs
- Menu.cs
- EditingCoordinator.cs
- DispatcherHookEventArgs.cs
- Thumb.cs
- NameGenerator.cs
- DictionaryEditChange.cs
- ScriptBehaviorDescriptor.cs
- ListSortDescription.cs
- SqlStatistics.cs
- StorageMappingFragment.cs
- HtmlTableCell.cs
- CheckBox.cs
- XPathDocument.cs
- WmlFormAdapter.cs
- SqlAliasesReferenced.cs
- Tuple.cs
- DrawingGroupDrawingContext.cs
- FontEmbeddingManager.cs
- TagPrefixAttribute.cs
- XamlReaderHelper.cs
- _ListenerRequestStream.cs
- keycontainerpermission.cs
- ToolStripTextBox.cs
- BrowserCapabilitiesCodeGenerator.cs
- ResourceDescriptionAttribute.cs
- KeyValueInternalCollection.cs
- EmptyStringExpandableObjectConverter.cs
- SqlDataReader.cs
- DataGridView.cs
- SqlClientWrapperSmiStreamChars.cs
- UseLicense.cs
- GridViewAutomationPeer.cs
- XmlAutoDetectWriter.cs
- Int64.cs
- DesignTimeParseData.cs
- AddingNewEventArgs.cs
- RenderContext.cs
- AppDomainProtocolHandler.cs
- TreeNodeCollection.cs
- HttpException.cs
- ToolBarOverflowPanel.cs
- SerializationFieldInfo.cs
- InputDevice.cs
- CompressEmulationStream.cs
- FormDocumentDesigner.cs
- TableDetailsRow.cs
- MailMessageEventArgs.cs
- AxisAngleRotation3D.cs
- EventLogPermissionEntry.cs
- MachineSettingsSection.cs