Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / Json / JsonCollectionDataContract.cs / 1305376 / JsonCollectionDataContract.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Runtime.Serialization.Json { using System.Threading; using System.Xml; using System.Security; class JsonCollectionDataContract : 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] JsonCollectionDataContractCriticalHelper helper; [Fx.Tag.SecurityNote(Critical = "Initializes SecurityCritical field 'helper'.", Safe = "Doesn't leak anything.")] [SecuritySafeCritical] public JsonCollectionDataContract(CollectionDataContract traditionalDataContract) : base(new JsonCollectionDataContractCriticalHelper(traditionalDataContract)) { this.helper = base.Helper as JsonCollectionDataContractCriticalHelper; } internal JsonFormatCollectionReaderDelegate JsonFormatReaderDelegate { [Fx.Tag.SecurityNote(Critical = "Fetches the critical JsonFormatReaderDelegate property.", Safe = "JsonFormatReaderDelegate only needs to be protected for write.")] [SecuritySafeCritical] get { if (helper.JsonFormatReaderDelegate == null) { lock (this) { if (helper.JsonFormatReaderDelegate == null) { JsonFormatCollectionReaderDelegate tempDelegate = new JsonFormatReaderGenerator().GenerateCollectionReader(TraditionalCollectionDataContract); Thread.MemoryBarrier(); helper.JsonFormatReaderDelegate = tempDelegate; } } } return helper.JsonFormatReaderDelegate; } } internal JsonFormatGetOnlyCollectionReaderDelegate JsonFormatGetOnlyReaderDelegate { [Fx.Tag.SecurityNote(Critical = "Fetches the critical JsonFormatGetOnlyReaderDelegate property.", Safe = "JsonFormatGetOnlyReaderDelegate only needs to be protected for write; initialized in getter if null.")] [SecuritySafeCritical] get { if (helper.JsonFormatGetOnlyReaderDelegate == null) { lock (this) { if (helper.JsonFormatGetOnlyReaderDelegate == null) { JsonFormatGetOnlyCollectionReaderDelegate tempDelegate = new JsonFormatReaderGenerator().GenerateGetOnlyCollectionReader(TraditionalCollectionDataContract); Thread.MemoryBarrier(); helper.JsonFormatGetOnlyReaderDelegate = tempDelegate; } } } return helper.JsonFormatGetOnlyReaderDelegate; } } internal JsonFormatCollectionWriterDelegate JsonFormatWriterDelegate { [Fx.Tag.SecurityNote(Critical = "Fetches the critical JsonFormatWriterDelegate property.", Safe = "JsonFormatWriterDelegate only needs to be protected for write.")] [SecuritySafeCritical] get { if (helper.JsonFormatWriterDelegate == null) { lock (this) { if (helper.JsonFormatWriterDelegate == null) { JsonFormatCollectionWriterDelegate tempDelegate = new JsonFormatWriterGenerator().GenerateCollectionWriter(TraditionalCollectionDataContract); Thread.MemoryBarrier(); helper.JsonFormatWriterDelegate = tempDelegate; } } } return helper.JsonFormatWriterDelegate; } } CollectionDataContract TraditionalCollectionDataContract { [Fx.Tag.SecurityNote(Critical = "Fetches the critical TraditionalCollectionDataContract property.", Safe = "TraditionalCollectionDataContract only needs to be protected for write.")] [SecuritySafeCritical] get { return this.helper.TraditionalCollectionDataContract; } } public override object ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) { jsonReader.Read(); object o = null; if (context.IsGetOnlyCollection) { // IsGetOnlyCollection value has already been used to create current collectiondatacontract, value can now be reset. context.IsGetOnlyCollection = false; JsonFormatGetOnlyReaderDelegate(jsonReader, context, XmlDictionaryString.Empty, JsonGlobals.itemDictionaryString, TraditionalCollectionDataContract); } else { o = JsonFormatReaderDelegate(jsonReader, context, XmlDictionaryString.Empty, JsonGlobals.itemDictionaryString, TraditionalCollectionDataContract); } jsonReader.ReadEndElement(); return o; } public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle) { // IsGetOnlyCollection value has already been used to create current collectiondatacontract, value can now be reset. context.IsGetOnlyCollection = false; JsonFormatWriterDelegate(jsonWriter, obj, context, TraditionalCollectionDataContract); } [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 JsonCollectionDataContractCriticalHelper : JsonDataContractCriticalHelper { JsonFormatCollectionReaderDelegate jsonFormatReaderDelegate; JsonFormatGetOnlyCollectionReaderDelegate jsonFormatGetOnlyReaderDelegate; JsonFormatCollectionWriterDelegate jsonFormatWriterDelegate; CollectionDataContract traditionalCollectionDataContract; public JsonCollectionDataContractCriticalHelper(CollectionDataContract traditionalDataContract) : base(traditionalDataContract) { this.traditionalCollectionDataContract = traditionalDataContract; } internal JsonFormatCollectionReaderDelegate JsonFormatReaderDelegate { get { return this.jsonFormatReaderDelegate; } set { this.jsonFormatReaderDelegate = value; } } internal JsonFormatGetOnlyCollectionReaderDelegate JsonFormatGetOnlyReaderDelegate { get { return this.jsonFormatGetOnlyReaderDelegate; } set { this.jsonFormatGetOnlyReaderDelegate = value; } } internal JsonFormatCollectionWriterDelegate JsonFormatWriterDelegate { get { return this.jsonFormatWriterDelegate; } set { this.jsonFormatWriterDelegate = value; } } internal CollectionDataContract TraditionalCollectionDataContract { get { return this.traditionalCollectionDataContract; } } } } } // 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
- regiisutil.cs
- ArrayElementGridEntry.cs
- ConfigurationSectionGroup.cs
- ListItem.cs
- RangeBase.cs
- ScrollItemPattern.cs
- TraceListener.cs
- Vector3D.cs
- HelpEvent.cs
- ActivityContext.cs
- DesignBindingEditor.cs
- ThicknessKeyFrameCollection.cs
- CTreeGenerator.cs
- ScriptingWebServicesSectionGroup.cs
- CategoryNameCollection.cs
- StoreItemCollection.cs
- IImplicitResourceProvider.cs
- SubpageParaClient.cs
- OutputCacheSection.cs
- ValueType.cs
- BuildProviderUtils.cs
- HandlerBase.cs
- EmissiveMaterial.cs
- DbMetaDataColumnNames.cs
- SubMenuStyleCollection.cs
- SafeNativeMethodsMilCoreApi.cs
- ValidationError.cs
- Form.cs
- ZipIOCentralDirectoryBlock.cs
- CheckBox.cs
- Rfc2898DeriveBytes.cs
- TextFormatterHost.cs
- TextChange.cs
- WebPartConnectionsCancelVerb.cs
- DictionaryEntry.cs
- MimeTypeAttribute.cs
- CriticalFinalizerObject.cs
- PeerResolverSettings.cs
- FolderLevelBuildProviderCollection.cs
- ListControlConvertEventArgs.cs
- StringUtil.cs
- NullRuntimeConfig.cs
- LockCookie.cs
- XmlSchemaSimpleContentExtension.cs
- metadatamappinghashervisitor.cs
- RequestBringIntoViewEventArgs.cs
- XmlHierarchicalDataSourceView.cs
- System.Data_BID.cs
- AspNetHostingPermission.cs
- Popup.cs
- RSAPKCS1KeyExchangeFormatter.cs
- DataGridViewBand.cs
- ReachSerializer.cs
- CircleHotSpot.cs
- ConfigurationStrings.cs
- VerificationAttribute.cs
- SmiGettersStream.cs
- PropertyRecord.cs
- CachedBitmap.cs
- HostedImpersonationContext.cs
- SchemaExporter.cs
- NotifyIcon.cs
- PeerTransportListenAddressValidator.cs
- XMLUtil.cs
- DbProviderFactoriesConfigurationHandler.cs
- BlobPersonalizationState.cs
- InfoCardUIAgent.cs
- XmlWriterDelegator.cs
- KoreanCalendar.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- HtmlImage.cs
- SQLBoolean.cs
- XmlHierarchicalDataSourceView.cs
- NavigationWindow.cs
- ControlParameter.cs
- SelectionRange.cs
- NamespaceList.cs
- ListDictionaryInternal.cs
- TextBox.cs
- WindowsNonControl.cs
- DataControlReferenceCollection.cs
- CounterCreationDataCollection.cs
- Trigger.cs
- ServerIdentity.cs
- DialogBaseForm.cs
- FolderBrowserDialog.cs
- MatrixAnimationBase.cs
- NavigationWindow.cs
- ProfilePropertySettingsCollection.cs
- XmlSchemaValidationException.cs
- TextElementCollectionHelper.cs
- HashMembershipCondition.cs
- FixedPage.cs
- ValueQuery.cs
- ProtocolElement.cs
- StorageAssociationSetMapping.cs
- ScrollBarRenderer.cs
- IndexOutOfRangeException.cs
- PersonalizationProviderHelper.cs
- Renderer.cs