Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Server / System / Data / Services / Epm / EpmCustomContentSerializer.cs / 1305376 / EpmCustomContentSerializer.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Class used for serializing custom EntityPropertyMappingAttribute content // for non-syndication mappings // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services.Common { using System.Collections.Generic; using System.Diagnostics; #if !ASTORIA_CLIENT using System.ServiceModel.Syndication; using System.Data.Services.Providers; #else using System.Data.Services.Client; using System.Xml; #endif ////// Base visitor class for performing serialization of custom content in the feed entry whose mapping /// is provided through EntityPropertyMappingAttributes /// internal sealed class EpmCustomContentSerializer : EpmContentSerializerBase, IDisposable { ///IDisposable helper state private bool disposed; ////// Dictionary mapping visitor content and with target paths /// private DictionaryvisitorContent; #if ASTORIA_CLIENT /// /// Constructor initializes the base class be identifying itself as a custom content serializer /// /// Target tree containing mapping information /// Object to be serialized /// SyndicationItem to which content will be added internal EpmCustomContentSerializer(EpmTargetTree targetTree, object element, XmlWriter target) : base(targetTree, false, element, target) { this.InitializeVisitorContent(); } #else ////// Constructor initializes the base class be identifying itself as a custom content serializer /// /// Target tree containing mapping information /// Object to be serialized /// SyndicationItem to which content will be added /// Null valued properties found during serialization /// Data Service provider used for rights verification. internal EpmCustomContentSerializer(EpmTargetTree targetTree, object element, SyndicationItem target, EpmContentSerializer.EpmNullValuedPropertyTree nullValuedProperties, DataServiceProviderWrapper provider) : base(targetTree, false, element, target) { this.InitializeVisitorContent(nullValuedProperties, provider); } #endif ////// Closes all the XmlWriter and MemoryStream objects in the tree and adds them to the SyndicationItem /// as ElementExtensions. Invokes the NodeDataCleaner to dispose off any existing memory stream and /// XmlWriter objects /// public void Dispose() { if (!this.disposed) { foreach (EpmTargetPathSegment subSegmentOfRoot in this.Root.SubSegments) { EpmCustomContentWriterNodeData c = this.visitorContent[subSegmentOfRoot]; Debug.Assert(c != null, "Must have custom data for all the children of root"); if (this.Success) { c.AddContentToTarget(this.Target); } c.Dispose(); } this.disposed = true; } } #if ASTORIA_CLIENT ////// Override of the base Visitor method, which actually performs mapping search and serialization /// /// Current segment being checked for mapping /// Which sub segments to serialize protected override void Serialize(EpmTargetPathSegment targetSegment, EpmSerializationKind kind) #else ////// Override of the base Visitor method, which actually performs mapping search and serialization /// /// Current segment being checked for mapping /// Which sub segments to serialize /// Data Service provider used for rights verification. protected override void Serialize(EpmTargetPathSegment targetSegment, EpmSerializationKind kind, DataServiceProviderWrapper provider) #endif { if (targetSegment.IsAttribute) { this.WriteAttribute(targetSegment); } else { #if ASTORIA_CLIENT this.WriteElement(targetSegment); #else this.WriteElement(targetSegment, provider); #endif } } ////// Given a segment, writes the attribute to xml writer corresponding to it /// /// Segment being written private void WriteAttribute(EpmTargetPathSegment targetSegment) { // Content to be written in an attribute Debug.Assert(targetSegment.HasContent, "Must have content for attributes"); EpmCustomContentWriterNodeData currentContent = this.visitorContent[targetSegment]; currentContent.XmlContentWriter.WriteAttributeString( targetSegment.SegmentNamespacePrefix, targetSegment.SegmentName.Substring(1), targetSegment.SegmentNamespaceUri, currentContent.Data); } #if ASTORIA_CLIENT ////// Given a segment, writes the element to xml writer corresponding to it, works recursively to write child elements/attributes /// /// Segment being written private void WriteElement(EpmTargetPathSegment targetSegment) #else ////// Given a segment, writes the element to xml writer corresponding to it, works recursively to write child elements/attributes /// /// Segment being written /// Data Service provider used for rights verification. private void WriteElement(EpmTargetPathSegment targetSegment, DataServiceProviderWrapper provider) #endif { // Content to be written in an element EpmCustomContentWriterNodeData currentContent = this.visitorContent[targetSegment]; currentContent.XmlContentWriter.WriteStartElement( targetSegment.SegmentNamespacePrefix, targetSegment.SegmentName, targetSegment.SegmentNamespaceUri); #if ASTORIA_CLIENT // Serialize the attributes and children before serializing the data itself base.Serialize(targetSegment, EpmSerializationKind.Attributes); #else // Serialize the attributes and children before serializing the data itself base.Serialize(targetSegment, EpmSerializationKind.Attributes, provider); #endif if (targetSegment.HasContent) { Debug.Assert(currentContent.Data != null, "Must always have non-null data content value"); currentContent.XmlContentWriter.WriteString(currentContent.Data); } #if ASTORIA_CLIENT // Serialize the attributes and children before serializing the data itself base.Serialize(targetSegment, EpmSerializationKind.Elements); #else // Serialize the attributes and children before serializing the data itself base.Serialize(targetSegment, EpmSerializationKind.Elements, provider); #endif currentContent.XmlContentWriter.WriteEndElement(); } #if ASTORIA_CLIENT ///Initializes content for the serializer visitor private void InitializeVisitorContent() { this.visitorContent = new Dictionary(ReferenceEqualityComparer .Instance); // Initialize all the root's children's xml writers foreach (EpmTargetPathSegment subSegmentOfRoot in this.Root.SubSegments) { this.visitorContent.Add(subSegmentOfRoot, new EpmCustomContentWriterNodeData(subSegmentOfRoot, this.Element)); this.InitializeSubSegmentVisitorContent(subSegmentOfRoot); } } /// Initialize the visitor content for all of root's grandchildren and beyond /// One of root's children private void InitializeSubSegmentVisitorContent(EpmTargetPathSegment subSegment) { foreach (EpmTargetPathSegment segment in subSegment.SubSegments) { this.visitorContent.Add(segment, new EpmCustomContentWriterNodeData(this.visitorContent[subSegment], segment, this.Element)); this.InitializeSubSegmentVisitorContent(segment); } } #else ///Initializes content for the serializer visitor /// Null valued properties found during serialization /// Data Service provider used for rights verification. private void InitializeVisitorContent(EpmContentSerializer.EpmNullValuedPropertyTree nullValuedProperties, DataServiceProviderWrapper provider) { this.visitorContent = new Dictionary(ReferenceEqualityComparer .Instance); // Initialize all the root's children's xml writers foreach (EpmTargetPathSegment subSegmentOfRoot in this.Root.SubSegments) { this.visitorContent.Add(subSegmentOfRoot, new EpmCustomContentWriterNodeData(subSegmentOfRoot, this.Element, nullValuedProperties, provider)); this.InitializeSubSegmentVisitorContent(subSegmentOfRoot, nullValuedProperties, provider); } } /// Initialize the visitor content for all of root's grandchildren and beyond /// One of root's children /// Null valued properties found during serialization /// Data Service provider used for rights verification. private void InitializeSubSegmentVisitorContent(EpmTargetPathSegment subSegment, EpmContentSerializer.EpmNullValuedPropertyTree nullValuedProperties, DataServiceProviderWrapper provider) { foreach (EpmTargetPathSegment segment in subSegment.SubSegments) { this.visitorContent.Add(segment, new EpmCustomContentWriterNodeData(this.visitorContent[subSegment], segment, this.Element, nullValuedProperties, provider)); this.InitializeSubSegmentVisitorContent(segment, nullValuedProperties, provider); } } #endif } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Class used for serializing custom EntityPropertyMappingAttribute content // for non-syndication mappings // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services.Common { using System.Collections.Generic; using System.Diagnostics; #if !ASTORIA_CLIENT using System.ServiceModel.Syndication; using System.Data.Services.Providers; #else using System.Data.Services.Client; using System.Xml; #endif ////// Base visitor class for performing serialization of custom content in the feed entry whose mapping /// is provided through EntityPropertyMappingAttributes /// internal sealed class EpmCustomContentSerializer : EpmContentSerializerBase, IDisposable { ///IDisposable helper state private bool disposed; ////// Dictionary mapping visitor content and with target paths /// private DictionaryvisitorContent; #if ASTORIA_CLIENT /// /// Constructor initializes the base class be identifying itself as a custom content serializer /// /// Target tree containing mapping information /// Object to be serialized /// SyndicationItem to which content will be added internal EpmCustomContentSerializer(EpmTargetTree targetTree, object element, XmlWriter target) : base(targetTree, false, element, target) { this.InitializeVisitorContent(); } #else ////// Constructor initializes the base class be identifying itself as a custom content serializer /// /// Target tree containing mapping information /// Object to be serialized /// SyndicationItem to which content will be added /// Null valued properties found during serialization /// Data Service provider used for rights verification. internal EpmCustomContentSerializer(EpmTargetTree targetTree, object element, SyndicationItem target, EpmContentSerializer.EpmNullValuedPropertyTree nullValuedProperties, DataServiceProviderWrapper provider) : base(targetTree, false, element, target) { this.InitializeVisitorContent(nullValuedProperties, provider); } #endif ////// Closes all the XmlWriter and MemoryStream objects in the tree and adds them to the SyndicationItem /// as ElementExtensions. Invokes the NodeDataCleaner to dispose off any existing memory stream and /// XmlWriter objects /// public void Dispose() { if (!this.disposed) { foreach (EpmTargetPathSegment subSegmentOfRoot in this.Root.SubSegments) { EpmCustomContentWriterNodeData c = this.visitorContent[subSegmentOfRoot]; Debug.Assert(c != null, "Must have custom data for all the children of root"); if (this.Success) { c.AddContentToTarget(this.Target); } c.Dispose(); } this.disposed = true; } } #if ASTORIA_CLIENT ////// Override of the base Visitor method, which actually performs mapping search and serialization /// /// Current segment being checked for mapping /// Which sub segments to serialize protected override void Serialize(EpmTargetPathSegment targetSegment, EpmSerializationKind kind) #else ////// Override of the base Visitor method, which actually performs mapping search and serialization /// /// Current segment being checked for mapping /// Which sub segments to serialize /// Data Service provider used for rights verification. protected override void Serialize(EpmTargetPathSegment targetSegment, EpmSerializationKind kind, DataServiceProviderWrapper provider) #endif { if (targetSegment.IsAttribute) { this.WriteAttribute(targetSegment); } else { #if ASTORIA_CLIENT this.WriteElement(targetSegment); #else this.WriteElement(targetSegment, provider); #endif } } ////// Given a segment, writes the attribute to xml writer corresponding to it /// /// Segment being written private void WriteAttribute(EpmTargetPathSegment targetSegment) { // Content to be written in an attribute Debug.Assert(targetSegment.HasContent, "Must have content for attributes"); EpmCustomContentWriterNodeData currentContent = this.visitorContent[targetSegment]; currentContent.XmlContentWriter.WriteAttributeString( targetSegment.SegmentNamespacePrefix, targetSegment.SegmentName.Substring(1), targetSegment.SegmentNamespaceUri, currentContent.Data); } #if ASTORIA_CLIENT ////// Given a segment, writes the element to xml writer corresponding to it, works recursively to write child elements/attributes /// /// Segment being written private void WriteElement(EpmTargetPathSegment targetSegment) #else ////// Given a segment, writes the element to xml writer corresponding to it, works recursively to write child elements/attributes /// /// Segment being written /// Data Service provider used for rights verification. private void WriteElement(EpmTargetPathSegment targetSegment, DataServiceProviderWrapper provider) #endif { // Content to be written in an element EpmCustomContentWriterNodeData currentContent = this.visitorContent[targetSegment]; currentContent.XmlContentWriter.WriteStartElement( targetSegment.SegmentNamespacePrefix, targetSegment.SegmentName, targetSegment.SegmentNamespaceUri); #if ASTORIA_CLIENT // Serialize the attributes and children before serializing the data itself base.Serialize(targetSegment, EpmSerializationKind.Attributes); #else // Serialize the attributes and children before serializing the data itself base.Serialize(targetSegment, EpmSerializationKind.Attributes, provider); #endif if (targetSegment.HasContent) { Debug.Assert(currentContent.Data != null, "Must always have non-null data content value"); currentContent.XmlContentWriter.WriteString(currentContent.Data); } #if ASTORIA_CLIENT // Serialize the attributes and children before serializing the data itself base.Serialize(targetSegment, EpmSerializationKind.Elements); #else // Serialize the attributes and children before serializing the data itself base.Serialize(targetSegment, EpmSerializationKind.Elements, provider); #endif currentContent.XmlContentWriter.WriteEndElement(); } #if ASTORIA_CLIENT ///Initializes content for the serializer visitor private void InitializeVisitorContent() { this.visitorContent = new Dictionary(ReferenceEqualityComparer .Instance); // Initialize all the root's children's xml writers foreach (EpmTargetPathSegment subSegmentOfRoot in this.Root.SubSegments) { this.visitorContent.Add(subSegmentOfRoot, new EpmCustomContentWriterNodeData(subSegmentOfRoot, this.Element)); this.InitializeSubSegmentVisitorContent(subSegmentOfRoot); } } /// Initialize the visitor content for all of root's grandchildren and beyond /// One of root's children private void InitializeSubSegmentVisitorContent(EpmTargetPathSegment subSegment) { foreach (EpmTargetPathSegment segment in subSegment.SubSegments) { this.visitorContent.Add(segment, new EpmCustomContentWriterNodeData(this.visitorContent[subSegment], segment, this.Element)); this.InitializeSubSegmentVisitorContent(segment); } } #else ///Initializes content for the serializer visitor /// Null valued properties found during serialization /// Data Service provider used for rights verification. private void InitializeVisitorContent(EpmContentSerializer.EpmNullValuedPropertyTree nullValuedProperties, DataServiceProviderWrapper provider) { this.visitorContent = new Dictionary(ReferenceEqualityComparer .Instance); // Initialize all the root's children's xml writers foreach (EpmTargetPathSegment subSegmentOfRoot in this.Root.SubSegments) { this.visitorContent.Add(subSegmentOfRoot, new EpmCustomContentWriterNodeData(subSegmentOfRoot, this.Element, nullValuedProperties, provider)); this.InitializeSubSegmentVisitorContent(subSegmentOfRoot, nullValuedProperties, provider); } } /// Initialize the visitor content for all of root's grandchildren and beyond /// One of root's children /// Null valued properties found during serialization /// Data Service provider used for rights verification. private void InitializeSubSegmentVisitorContent(EpmTargetPathSegment subSegment, EpmContentSerializer.EpmNullValuedPropertyTree nullValuedProperties, DataServiceProviderWrapper provider) { foreach (EpmTargetPathSegment segment in subSegment.SubSegments) { this.visitorContent.Add(segment, new EpmCustomContentWriterNodeData(this.visitorContent[subSegment], segment, this.Element, nullValuedProperties, provider)); this.InitializeSubSegmentVisitorContent(segment, nullValuedProperties, provider); } } #endif } } // 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
- XmlSerializerVersionAttribute.cs
- GridViewCancelEditEventArgs.cs
- Connector.cs
- CultureMapper.cs
- RelativeSource.cs
- DesignerValidationSummaryAdapter.cs
- IisTraceWebEventProvider.cs
- NonSerializedAttribute.cs
- DefaultEventAttribute.cs
- WebPartEditorOkVerb.cs
- TextTreeTextElementNode.cs
- OpenTypeCommon.cs
- JsonDataContract.cs
- StateItem.cs
- TreeNodeMouseHoverEvent.cs
- Opcode.cs
- LZCodec.cs
- QueryableFilterUserControl.cs
- SafeProcessHandle.cs
- TlsnegoTokenAuthenticator.cs
- GeneralTransform3DTo2D.cs
- _NestedSingleAsyncResult.cs
- WebPartsPersonalizationAuthorization.cs
- UpdateException.cs
- PageCatalogPart.cs
- ActivationService.cs
- NumericUpDownAccelerationCollection.cs
- HtmlTable.cs
- IisTraceListener.cs
- WebPartCatalogAddVerb.cs
- BaseTemplateParser.cs
- RegexCode.cs
- AbstractSvcMapFileLoader.cs
- basevalidator.cs
- OptimizerPatterns.cs
- SqlUserDefinedTypeAttribute.cs
- EntityCommandCompilationException.cs
- ToolStripDropDownItem.cs
- XmlSchemaObjectCollection.cs
- SelectionProcessor.cs
- BufferBuilder.cs
- DynamicResourceExtension.cs
- WmlSelectionListAdapter.cs
- LostFocusEventManager.cs
- TableLayoutColumnStyleCollection.cs
- PrintPreviewGraphics.cs
- Expander.cs
- DataGridViewLinkCell.cs
- FlowNode.cs
- ProviderUtil.cs
- NavigationPropertyEmitter.cs
- MemberMaps.cs
- PageStatePersister.cs
- ConstructorExpr.cs
- Selector.cs
- XmlEncodedRawTextWriter.cs
- CompositeScriptReference.cs
- GeneralTransform3DTo2DTo3D.cs
- AuthenticationConfig.cs
- JavaScriptObjectDeserializer.cs
- ClientSession.cs
- WebControl.cs
- LayoutTable.cs
- ControlParser.cs
- EmptyEnumerator.cs
- CommandBinding.cs
- HttpServerVarsCollection.cs
- CodeIdentifier.cs
- xsdvalidator.cs
- LogLogRecordEnumerator.cs
- NopReturnReader.cs
- DataFormats.cs
- ImageBrush.cs
- ServiceInfo.cs
- RegexParser.cs
- EntityDataSourceContextCreatingEventArgs.cs
- DatePicker.cs
- PrinterUnitConvert.cs
- CodeAttributeDeclarationCollection.cs
- UmAlQuraCalendar.cs
- Parsers.cs
- Encoding.cs
- DataGridViewLayoutData.cs
- SelectionRangeConverter.cs
- CustomError.cs
- EventToken.cs
- PictureBox.cs
- PeerContact.cs
- RangeValuePattern.cs
- FacetDescription.cs
- ThicknessAnimationBase.cs
- EmptyTextWriter.cs
- Vector3DValueSerializer.cs
- DbMetaDataCollectionNames.cs
- recordstatefactory.cs
- IdentitySection.cs
- SpeechSynthesizer.cs
- Win32.cs
- CommandEventArgs.cs
- DbParameterCollectionHelper.cs