Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / NetFx35 / System.ServiceModel.Web / System / Runtime / Serialization / Json / JsonEnumDataContract.cs / 1 / JsonEnumDataContract.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Runtime.Serialization.Json { using System.Xml; using System.Security; class JsonEnumDataContract : JsonDataContract { //// 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; //// Critical - initializes SecurityCritical field 'helper' // Safe - doesn't leak anything // [SecurityCritical, SecurityTreatAsSafe] public JsonEnumDataContract(EnumDataContract traditionalDataContract) : base(new JsonEnumDataContractCriticalHelper(traditionalDataContract)) { this.helper = base.Helper as JsonEnumDataContractCriticalHelper; } public bool IsULong { //// Critical - fetches the critical IsULong property // Safe - IsULong only needs to be protected for write // [SecurityCritical, SecurityTreatAsSafe] 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)); } } //// Critical - holds all state used for (de)serializing types. // since the data is cached statically, we lock down access to it. // [SecurityCritical(SecurityCriticalScope.Everything)] 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RawStylusSystemGestureInputReport.cs
- OLEDB_Util.cs
- CodeDomLoader.cs
- TableRow.cs
- FrameworkElement.cs
- Drawing.cs
- ListBoxItemWrapperAutomationPeer.cs
- MILUtilities.cs
- XmlLoader.cs
- FloatMinMaxAggregationOperator.cs
- PropertyGrid.cs
- PrintDialog.cs
- RandomNumberGenerator.cs
- sqlpipe.cs
- DataAccessor.cs
- ValidationEventArgs.cs
- RegistryKey.cs
- MarkupCompiler.cs
- TextTreeTextBlock.cs
- ReadContentAsBinaryHelper.cs
- CompiledRegexRunnerFactory.cs
- RadioButtonBaseAdapter.cs
- KerberosTicketHashIdentifierClause.cs
- SpecialNameAttribute.cs
- XmlSchemaSubstitutionGroup.cs
- OrderedDictionaryStateHelper.cs
- ConnectionManagementElementCollection.cs
- SafeThreadHandle.cs
- Crypto.cs
- TableLayoutSettings.cs
- UIElementParagraph.cs
- IncrementalReadDecoders.cs
- PackagingUtilities.cs
- PersistenceTypeAttribute.cs
- ImportDesigner.xaml.cs
- SoapAttributes.cs
- LineServices.cs
- DataColumnMappingCollection.cs
- ChildDocumentBlock.cs
- HttpRawResponse.cs
- FrameworkPropertyMetadata.cs
- SdlChannelSink.cs
- Converter.cs
- ITextView.cs
- columnmapfactory.cs
- MailBnfHelper.cs
- AncestorChangedEventArgs.cs
- SequentialUshortCollection.cs
- WorkflowInstanceAbortedRecord.cs
- MdiWindowListItemConverter.cs
- WriterOutput.cs
- securestring.cs
- ListViewItemSelectionChangedEvent.cs
- XamlFrame.cs
- EdmProviderManifest.cs
- compensatingcollection.cs
- UpdateRecord.cs
- ReadOnlyPropertyMetadata.cs
- FileUtil.cs
- WebPartUserCapability.cs
- BindingBase.cs
- CqlParserHelpers.cs
- AttachedAnnotation.cs
- TreeViewHitTestInfo.cs
- RegexCode.cs
- FormsIdentity.cs
- Module.cs
- DesignerContextDescriptor.cs
- ContentTextAutomationPeer.cs
- Ops.cs
- ExpressionParser.cs
- StylusDevice.cs
- LabelAutomationPeer.cs
- ArgumentsParser.cs
- WpfPayload.cs
- RawStylusInputCustomData.cs
- ConfigurationStrings.cs
- Soap12ProtocolReflector.cs
- FullTextBreakpoint.cs
- ServiceMetadataBehavior.cs
- FrameworkContentElement.cs
- SourceFileBuildProvider.cs
- StyleSelector.cs
- ScriptComponentDescriptor.cs
- TemplatedMailWebEventProvider.cs
- CodeDomSerializerException.cs
- ExtractorMetadata.cs
- DeflateStream.cs
- EntityCommand.cs
- CompressStream.cs
- SmtpDigestAuthenticationModule.cs
- RTTrackingProfile.cs
- EntitySqlQueryCacheKey.cs
- SqlCaseSimplifier.cs
- ToolStripContainer.cs
- ConstraintCollection.cs
- SQLConvert.cs
- shaperfactoryquerycachekey.cs
- OperationInfoBase.cs
- SQLSingleStorage.cs