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
- CodeComment.cs
- FixedFlowMap.cs
- HyperLinkStyle.cs
- WS2007FederationHttpBindingElement.cs
- SchemaMerger.cs
- EditCommandColumn.cs
- EasingFunctionBase.cs
- SqlUserDefinedTypeAttribute.cs
- RawAppCommandInputReport.cs
- DispatchChannelSink.cs
- Matrix3DValueSerializer.cs
- _BasicClient.cs
- PreloadedPackages.cs
- UnionExpr.cs
- _ContextAwareResult.cs
- RadioButtonStandardAdapter.cs
- EntityDataSourceMemberPath.cs
- MbpInfo.cs
- ColorContextHelper.cs
- DbConnectionOptions.cs
- NetNamedPipeSecurityElement.cs
- TransactionException.cs
- EmptyStringExpandableObjectConverter.cs
- ValuePattern.cs
- JavaScriptObjectDeserializer.cs
- ReadOnlyPermissionSet.cs
- ComboBox.cs
- ObjectDataSourceMethodEventArgs.cs
- TTSEvent.cs
- LineGeometry.cs
- ToolStripContentPanelRenderEventArgs.cs
- ForwardPositionQuery.cs
- HtmlButton.cs
- SaveLedgerEntryRequest.cs
- MappingException.cs
- FacetDescriptionElement.cs
- hwndwrapper.cs
- XhtmlCssHandler.cs
- TypeElementCollection.cs
- WaitHandleCannotBeOpenedException.cs
- FormattedText.cs
- HttpCookieCollection.cs
- DataServiceProviderMethods.cs
- SocketCache.cs
- HttpCapabilitiesSectionHandler.cs
- RawMouseInputReport.cs
- ConfigurationErrorsException.cs
- DynamicControlParameter.cs
- PageBuildProvider.cs
- PropertyInfoSet.cs
- CodeTypeParameter.cs
- CodeAttributeArgument.cs
- PenLineJoinValidation.cs
- Rfc2898DeriveBytes.cs
- SrgsGrammarCompiler.cs
- NestPullup.cs
- PropertyTabChangedEvent.cs
- CngProperty.cs
- ImageFormat.cs
- FieldTemplateFactory.cs
- XmlEncoding.cs
- XmlSchemaObject.cs
- InplaceBitmapMetadataWriter.cs
- TraceContextRecord.cs
- Activity.cs
- ValueHandle.cs
- Attributes.cs
- RoleServiceManager.cs
- InfoCardKeyedHashAlgorithm.cs
- ComponentEvent.cs
- WebPartDeleteVerb.cs
- LinkLabel.cs
- ContextDataSourceView.cs
- CaseInsensitiveOrdinalStringComparer.cs
- SafeNativeMethodsOther.cs
- loginstatus.cs
- ObjectDataSourceEventArgs.cs
- GrammarBuilderDictation.cs
- PrivateFontCollection.cs
- PartialCachingAttribute.cs
- SmtpDateTime.cs
- ExternalCalls.cs
- RegexBoyerMoore.cs
- HtmlWindow.cs
- ContainerUtilities.cs
- EditorOptionAttribute.cs
- ConstructorBuilder.cs
- HitTestWithPointDrawingContextWalker.cs
- wgx_commands.cs
- SiteMapNodeItem.cs
- ChoiceConverter.cs
- MimeParameter.cs
- _NegoStream.cs
- DataGridViewCellLinkedList.cs
- CroppedBitmap.cs
- PathGeometry.cs
- DbDataSourceEnumerator.cs
- LoginStatusDesigner.cs
- SingleBodyParameterMessageFormatter.cs
- Evidence.cs