Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Serializer / SerializableTypeCodeDomSerializer.cs / 1305376 / SerializableTypeCodeDomSerializer.cs
namespace System.Workflow.ComponentModel.Serialization { using System; using System.CodeDom; using System.ComponentModel; using System.ComponentModel.Design; using System.ComponentModel.Design.Serialization; using System.Collections; using System.Resources; using System.Workflow.ComponentModel.Design; using System.Collections.Generic; using Microsoft.CSharp; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Compiler; using System.CodeDom.Compiler; using System.IO; using System.Reflection; using System.Diagnostics; #region Class SerializableTypeCodeDomSerializer internal sealed class SerializableTypeCodeDomSerializer : CodeDomSerializer { private CodeDomSerializer originalSerializer; public SerializableTypeCodeDomSerializer(CodeDomSerializer originalSerializer) { if (originalSerializer == null) throw new ArgumentNullException("originalSerializer"); this.originalSerializer = originalSerializer; } public override object Serialize(IDesignerSerializationManager manager, object value) { if (manager == null) throw new ArgumentNullException("manager"); object result = null; if (value == null) return result; CodeStatementCollection statements = null; ExpressionContext cxt = manager.Context[typeof(ExpressionContext)] as ExpressionContext; if (value.GetType().GetConstructor(new Type[0]) != null) { if (value is ICollection) { ExpressionContext varExct = null; if (cxt != null) { if (cxt.PresetValue != value) { try { statements = new CodeStatementCollection(); CodeVariableReferenceExpression varExpression = AddVariableExpression(manager, statements, value); varExct = new ExpressionContext(varExpression, value.GetType(), cxt.Owner, value); manager.Context.Push(varExct); result = this.originalSerializer.Serialize(manager, value); if (result is CodeStatementCollection) statements.AddRange(result as CodeStatementCollection); else if (result is CodeStatement) statements.Add(result as CodeStatement); else if (result is CodeExpression) // If the returned result is an expression, it mostly likely means the collection // can not be serialized using statements, instead it has been serialized as resources. // In this case, we just over-write the variable init expression with the "GetObject" // expression for resource objects. statements.Add(new CodeAssignStatement(varExpression, result as CodeExpression)); result = statements; } finally { if (varExct != null) manager.Context.Pop(); } } else { result = this.originalSerializer.Serialize(manager, value); } } } else { statements = new CodeStatementCollection(); CodeVariableReferenceExpression varExpression = AddVariableExpression(manager, statements, value); SerializeProperties(manager, statements, value, new Attribute[] { DesignOnlyAttribute.No }); SerializeEvents(manager, statements, value, new Attribute[] { DesignOnlyAttribute.No }); result = statements; } } else if (cxt != null) { result = this.originalSerializer.Serialize(manager, value); } return result; } private CodeVariableReferenceExpression AddVariableExpression(IDesignerSerializationManager manager, CodeStatementCollection statements, object value) { string varName = GetUniqueName(manager, value).Replace('`', '_'); CodeVariableDeclarationStatement varDecl = new CodeVariableDeclarationStatement(TypeDescriptor.GetClassName(value), varName); varDecl.InitExpression = new CodeObjectCreateExpression(TypeDescriptor.GetClassName(value), new CodeExpression[0]); ; statements.Add(varDecl); CodeVariableReferenceExpression varExpression = new CodeVariableReferenceExpression(varName); SetExpression(manager, value, varExpression); return varExpression; } } #endregion } // 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
- Transform.cs
- HuffCodec.cs
- tabpagecollectioneditor.cs
- WebPartVerb.cs
- QuaternionIndependentAnimationStorage.cs
- ViewBase.cs
- SplitContainer.cs
- ColorMatrix.cs
- MapPathBasedVirtualPathProvider.cs
- DocumentApplicationJournalEntry.cs
- SatelliteContractVersionAttribute.cs
- SendOperation.cs
- EventLogInternal.cs
- PopupControlService.cs
- ChannelSinkStacks.cs
- HashCodeCombiner.cs
- InlineObject.cs
- EntityContainerEmitter.cs
- CurrentChangingEventManager.cs
- ValidationException.cs
- MailSettingsSection.cs
- AmbiguousMatchException.cs
- MetadataItem.cs
- Identity.cs
- CounterCreationData.cs
- HttpResponse.cs
- ObjectResult.cs
- WeakRefEnumerator.cs
- SoapIncludeAttribute.cs
- Splitter.cs
- AccessibleObject.cs
- TimeoutHelper.cs
- XmlSchemaAnnotation.cs
- StringValidatorAttribute.cs
- IssuedTokenParametersEndpointAddressElement.cs
- SemanticKeyElement.cs
- Stack.cs
- ExtensionWindowHeader.cs
- RootBrowserWindowAutomationPeer.cs
- _SSPISessionCache.cs
- OdbcPermission.cs
- FrameworkElementFactory.cs
- HybridDictionary.cs
- SafeLocalAllocation.cs
- RijndaelManaged.cs
- ImportContext.cs
- ToolStripMenuItemDesigner.cs
- LineSegment.cs
- HiddenField.cs
- AutoGeneratedField.cs
- CompositeTypefaceMetrics.cs
- CommonDialog.cs
- CryptoStream.cs
- Domain.cs
- Font.cs
- TypeUtil.cs
- KeySplineConverter.cs
- SymmetricSecurityProtocol.cs
- GeometryDrawing.cs
- HandlerFactoryCache.cs
- FixedPage.cs
- shaperfactoryquerycacheentry.cs
- AssemblyFilter.cs
- XPathCompileException.cs
- DesignerSerializationVisibilityAttribute.cs
- SpStreamWrapper.cs
- Line.cs
- DataSpaceManager.cs
- CubicEase.cs
- XmlNullResolver.cs
- SHA512.cs
- Converter.cs
- ResXBuildProvider.cs
- RootBuilder.cs
- OwnerDrawPropertyBag.cs
- ElapsedEventArgs.cs
- XPathAncestorQuery.cs
- PackagePart.cs
- DetailsViewPagerRow.cs
- Point3DCollection.cs
- ClientConfigurationSystem.cs
- XmlWriterTraceListener.cs
- ContextMenuStrip.cs
- TypeReference.cs
- CustomExpressionEventArgs.cs
- WebPartEditorCancelVerb.cs
- DataObjectCopyingEventArgs.cs
- EntityContainerEmitter.cs
- AutomationElement.cs
- MimeImporter.cs
- COM2Properties.cs
- TrackBarRenderer.cs
- ToolStripSystemRenderer.cs
- CodeThrowExceptionStatement.cs
- DelegateTypeInfo.cs
- SqlRowUpdatedEvent.cs
- BuildManager.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- ListViewItemSelectionChangedEvent.cs
- XmlSchemaComplexType.cs