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
- ActionFrame.cs
- UIntPtr.cs
- Math.cs
- ScriptingJsonSerializationSection.cs
- BindingList.cs
- SerializableAttribute.cs
- DmlSqlGenerator.cs
- WebPartConnectionsEventArgs.cs
- UIElementCollection.cs
- XPathNavigatorReader.cs
- ResourceSetExpression.cs
- OperationContractAttribute.cs
- ImageMapEventArgs.cs
- VisualCollection.cs
- BrowserTree.cs
- AppearanceEditorPart.cs
- MenuItemStyle.cs
- ProxyHwnd.cs
- FontStyles.cs
- BaseValidatorDesigner.cs
- DeleteMemberBinder.cs
- WebExceptionStatus.cs
- WebConfigurationFileMap.cs
- CultureInfo.cs
- DataGrid.cs
- RedirectionProxy.cs
- PaintValueEventArgs.cs
- DesignTimeParseData.cs
- GridView.cs
- TreeViewBindingsEditor.cs
- GenerateScriptTypeAttribute.cs
- BaseParser.cs
- BamlResourceSerializer.cs
- QueryOutputWriter.cs
- UnmanagedMarshal.cs
- MemberCollection.cs
- XPathScanner.cs
- RelationshipNavigation.cs
- UriTemplateEquivalenceComparer.cs
- WebEvents.cs
- DynamicDocumentPaginator.cs
- StrokeFIndices.cs
- columnmapkeybuilder.cs
- ToolboxItemAttribute.cs
- _ProxyChain.cs
- CollaborationHelperFunctions.cs
- LoginAutoFormat.cs
- ColorMatrix.cs
- AdornerHitTestResult.cs
- DocumentGrid.cs
- RelatedPropertyManager.cs
- SecurityCredentialsManager.cs
- ISO2022Encoding.cs
- StatusBarPanel.cs
- SafeRegistryHandle.cs
- ElementHost.cs
- PathData.cs
- PropertiesTab.cs
- BaseHashHelper.cs
- DetailsViewPageEventArgs.cs
- XXXInfos.cs
- DependencyObjectPropertyDescriptor.cs
- ServiceDurableInstance.cs
- XmlToDatasetMap.cs
- ILGenerator.cs
- HotSpot.cs
- ApplicationException.cs
- UrlAuthorizationModule.cs
- DispatchChannelSink.cs
- PageAsyncTask.cs
- DockAndAnchorLayout.cs
- NgenServicingAttributes.cs
- versioninfo.cs
- UnauthorizedAccessException.cs
- Int16.cs
- GridLength.cs
- InvalidBodyAccessException.cs
- TypeDescriptor.cs
- DataGridViewIntLinkedList.cs
- CollectionViewProxy.cs
- ProfileInfo.cs
- PipelineModuleStepContainer.cs
- LogicalExpr.cs
- XmlDocument.cs
- RawStylusInputCustomDataList.cs
- RenderDataDrawingContext.cs
- HashCodeCombiner.cs
- SiteMapHierarchicalDataSourceView.cs
- UidManager.cs
- InputEventArgs.cs
- DateTimeSerializationSection.cs
- MenuBase.cs
- ScriptManagerProxy.cs
- Compress.cs
- BuildDependencySet.cs
- EdgeProfileValidation.cs
- DataSvcMapFile.cs
- ParserOptions.cs
- NavigationEventArgs.cs
- BaseComponentEditor.cs