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
- AuthenticationConfig.cs
- SeekableReadStream.cs
- Content.cs
- ConnectionProviderAttribute.cs
- WebConfigurationManager.cs
- Padding.cs
- CommandLibraryHelper.cs
- SocketElement.cs
- WebPartCatalogAddVerb.cs
- ControlBindingsCollection.cs
- DataSourceUtil.cs
- XmlBoundElement.cs
- PassportAuthentication.cs
- WebControlsSection.cs
- FilteredXmlReader.cs
- WithParamAction.cs
- StyleTypedPropertyAttribute.cs
- ExtendLockCommand.cs
- MetabaseSettings.cs
- TreeNodeBinding.cs
- Window.cs
- TableCellCollection.cs
- RectangleConverter.cs
- dataobject.cs
- SimpleColumnProvider.cs
- EntityContainerAssociationSet.cs
- ToolStripGrip.cs
- EntityDataSourceChangingEventArgs.cs
- ItemMap.cs
- StaticExtensionConverter.cs
- BamlResourceContent.cs
- HtmlLink.cs
- RenderDataDrawingContext.cs
- HandlerWithFactory.cs
- RelationshipDetailsCollection.cs
- ViewStateModeByIdAttribute.cs
- TypeConverterHelper.cs
- DashStyle.cs
- DataDocumentXPathNavigator.cs
- RegisteredScript.cs
- Int32AnimationBase.cs
- Root.cs
- ImageMetadata.cs
- QilVisitor.cs
- odbcmetadatacolumnnames.cs
- SynchronizedDispatch.cs
- SoapEnumAttribute.cs
- GridViewRow.cs
- MatrixTransform.cs
- MonitoringDescriptionAttribute.cs
- FloaterParaClient.cs
- _SecureChannel.cs
- SingleQueryOperator.cs
- ProtocolsConfiguration.cs
- SafeEventLogWriteHandle.cs
- NewItemsContextMenuStrip.cs
- IProducerConsumerCollection.cs
- CodeArrayCreateExpression.cs
- XmlException.cs
- GuidelineCollection.cs
- WebPartActionVerb.cs
- DetailsViewDeletedEventArgs.cs
- BrushConverter.cs
- TextSelection.cs
- BinaryMethodMessage.cs
- ToolTipAutomationPeer.cs
- StatusBarPanel.cs
- AliasExpr.cs
- SqlCaseSimplifier.cs
- Translator.cs
- FacetEnabledSchemaElement.cs
- dataSvcMapFileLoader.cs
- PaperSource.cs
- DataGrid.cs
- ResourceLoader.cs
- PermissionToken.cs
- BamlResourceDeserializer.cs
- _ConnectionGroup.cs
- DataServiceKeyAttribute.cs
- TriggerActionCollection.cs
- MsmqMessage.cs
- SoapAttributeAttribute.cs
- StyleBamlTreeBuilder.cs
- SmtpLoginAuthenticationModule.cs
- precedingsibling.cs
- SqlTopReducer.cs
- ReadWriteSpinLock.cs
- HMACRIPEMD160.cs
- ConstraintConverter.cs
- MemberCollection.cs
- RootProfilePropertySettingsCollection.cs
- URLString.cs
- EnvelopedSignatureTransform.cs
- HtmlEncodedRawTextWriter.cs
- RightsManagementEncryptedStream.cs
- LambdaCompiler.Statements.cs
- Rotation3DAnimationBase.cs
- RequestCacheManager.cs
- ImportOptions.cs
- TransactionManager.cs