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
- HtmlTernaryTree.cs
- WebRequest.cs
- PeerUnsafeNativeCryptMethods.cs
- DataBindEngine.cs
- TemplateColumn.cs
- BindingsCollection.cs
- ColumnPropertiesGroup.cs
- XmlILAnnotation.cs
- Unit.cs
- InProcStateClientManager.cs
- ServiceModelConfiguration.cs
- ResourceDisplayNameAttribute.cs
- DataRowView.cs
- codemethodreferenceexpression.cs
- ReferentialConstraint.cs
- Schedule.cs
- ElementAction.cs
- StylusCollection.cs
- RectValueSerializer.cs
- SchemaNamespaceManager.cs
- AutomationPropertyInfo.cs
- TabControlEvent.cs
- Keywords.cs
- TypeConverterMarkupExtension.cs
- MULTI_QI.cs
- RotateTransform.cs
- StatusBarPanelClickEvent.cs
- BulletChrome.cs
- FontWeights.cs
- OracleParameter.cs
- CurrentChangingEventManager.cs
- OleDbReferenceCollection.cs
- ItemMap.cs
- InputLanguageProfileNotifySink.cs
- SafeNativeMethods.cs
- SystemIPv6InterfaceProperties.cs
- ObjectViewListener.cs
- MatcherBuilder.cs
- CodeCommentStatement.cs
- CellTreeNode.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- TextEditorDragDrop.cs
- Switch.cs
- GridViewItemAutomationPeer.cs
- ErrorLog.cs
- DataGridViewTopLeftHeaderCell.cs
- ACL.cs
- StreamProxy.cs
- FileDetails.cs
- ReliableMessagingVersionConverter.cs
- EntityObject.cs
- SerialStream.cs
- XsltLoader.cs
- WebBrowserContainer.cs
- StandardBindingElementCollection.cs
- ByteStream.cs
- XmlILConstructAnalyzer.cs
- ParameterReplacerVisitor.cs
- Rectangle.cs
- SafeRightsManagementHandle.cs
- SqlComparer.cs
- UnsafeNativeMethods.cs
- EventRecord.cs
- NativeMethods.cs
- MetadataArtifactLoaderComposite.cs
- SiteMapDataSourceView.cs
- SmtpNtlmAuthenticationModule.cs
- DateTimeConstantAttribute.cs
- ResetableIterator.cs
- SystemColors.cs
- SettingsPropertyValue.cs
- Wildcard.cs
- DockPatternIdentifiers.cs
- ApplicationServiceManager.cs
- SspiSafeHandles.cs
- Popup.cs
- ConnectionsZone.cs
- WebEvents.cs
- MenuEventArgs.cs
- ChannelTerminatedException.cs
- BaseCAMarshaler.cs
- SafeViewOfFileHandle.cs
- XNodeSchemaApplier.cs
- RelationshipSet.cs
- DurableInstanceProvider.cs
- LoggedException.cs
- DbCommandDefinition.cs
- TextTreeUndo.cs
- HTMLTagNameToTypeMapper.cs
- ContentElement.cs
- EarlyBoundInfo.cs
- PersonalizationState.cs
- Mappings.cs
- WhitespaceRuleLookup.cs
- ImmutableCollection.cs
- DataObjectMethodAttribute.cs
- DrawListViewColumnHeaderEventArgs.cs
- EntityDataSourceChangingEventArgs.cs
- EntityException.cs
- BatchStream.cs