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
- JumpList.cs
- SectionXmlInfo.cs
- ZipIOLocalFileHeader.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- StickyNoteHelper.cs
- Substitution.cs
- DataFormats.cs
- XmlSerializationGeneratedCode.cs
- UriParserTemplates.cs
- Queue.cs
- _UriTypeConverter.cs
- SiteMapNodeCollection.cs
- ScopeCompiler.cs
- InheritanceRules.cs
- BamlVersionHeader.cs
- TextBoxAutomationPeer.cs
- SafeWaitHandle.cs
- PenContexts.cs
- Literal.cs
- ISFClipboardData.cs
- Win32.cs
- AccessDataSourceView.cs
- ProxyAttribute.cs
- CodeExporter.cs
- NetworkStream.cs
- TreeBuilder.cs
- XmlNamespaceDeclarationsAttribute.cs
- DataTableCollection.cs
- NativeRightsManagementAPIsStructures.cs
- ProcessInputEventArgs.cs
- ServiceDocumentFormatter.cs
- SqlDataSource.cs
- OdbcConnectionPoolProviderInfo.cs
- SoapObjectWriter.cs
- CommandLibraryHelper.cs
- FileRecordSequenceCompletedAsyncResult.cs
- ConnectorDragDropGlyph.cs
- EventListenerClientSide.cs
- EncodingTable.cs
- RuleConditionDialog.Designer.cs
- PaperSource.cs
- TransactionScope.cs
- EmptyReadOnlyDictionaryInternal.cs
- ApplicationSettingsBase.cs
- HtmlElement.cs
- FrameworkTextComposition.cs
- ConfigurationStrings.cs
- Container.cs
- ButtonPopupAdapter.cs
- SecurityContext.cs
- InputScopeAttribute.cs
- StandardCommands.cs
- ZipIOBlockManager.cs
- TabItemAutomationPeer.cs
- MarshalByValueComponent.cs
- HttpRequest.cs
- NGCPageContentCollectionSerializerAsync.cs
- XmlSchemaDocumentation.cs
- DefaultTextStoreTextComposition.cs
- HttpClientCertificate.cs
- MetadataFile.cs
- ControlTemplate.cs
- ObjectViewQueryResultData.cs
- CustomLineCap.cs
- WindowsUpDown.cs
- SoapIgnoreAttribute.cs
- DesignerDataColumn.cs
- SqlRowUpdatedEvent.cs
- OracleString.cs
- ClientApiGenerator.cs
- DetailsView.cs
- MediaElement.cs
- DrawingImage.cs
- DbProviderFactory.cs
- ComplexLine.cs
- Configuration.cs
- OpenFileDialog.cs
- MinimizableAttributeTypeConverter.cs
- DiscoveryDocumentReference.cs
- MasterPageParser.cs
- AttributeEmitter.cs
- RecommendedAsConfigurableAttribute.cs
- WebContext.cs
- ConfigurationValues.cs
- TimeZoneNotFoundException.cs
- DesignTimeType.cs
- ImageField.cs
- _FtpControlStream.cs
- XappLauncher.cs
- InputLanguageCollection.cs
- AnnotationComponentChooser.cs
- Compiler.cs
- ResourceContainer.cs
- XsdDuration.cs
- TraceListener.cs
- documentation.cs
- StreamedWorkflowDefinitionContext.cs
- SqlWebEventProvider.cs
- StyleTypedPropertyAttribute.cs
- TransformerTypeCollection.cs