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
- PropertyEmitter.cs
- DataGridViewLinkColumn.cs
- GlyphCollection.cs
- SafeTimerHandle.cs
- RequiredAttributeAttribute.cs
- CfgParser.cs
- XomlSerializationHelpers.cs
- Point3DAnimation.cs
- ComplexBindingPropertiesAttribute.cs
- CompiledQueryCacheKey.cs
- UrlAuthFailureHandler.cs
- SqlDataSourceCache.cs
- ReadOnlyAttribute.cs
- SharedHttpsTransportManager.cs
- ErrorInfoXmlDocument.cs
- DesignerAutoFormat.cs
- Package.cs
- StatusBarAutomationPeer.cs
- SqlExpander.cs
- OleServicesContext.cs
- VirtualDirectoryMapping.cs
- XmlMtomReader.cs
- RuleSettings.cs
- HtmlElementCollection.cs
- Int16AnimationBase.cs
- OdbcDataAdapter.cs
- TableProviderWrapper.cs
- LogicalExpr.cs
- IChannel.cs
- TrackingLocationCollection.cs
- InternalControlCollection.cs
- ToolStripMenuItem.cs
- SafeNativeMethods.cs
- Header.cs
- TypeSystem.cs
- UIntPtr.cs
- HttpBufferlessInputStream.cs
- Property.cs
- ReaderContextStackData.cs
- ElementInit.cs
- XmlName.cs
- QilParameter.cs
- KeyPressEvent.cs
- ObjectSpanRewriter.cs
- SystemColors.cs
- Policy.cs
- ServiceBuildProvider.cs
- Crypto.cs
- BatchStream.cs
- ContainerControl.cs
- PropertyToken.cs
- _UriSyntax.cs
- ComponentManagerBroker.cs
- InProcStateClientManager.cs
- XmlSchemaAny.cs
- SpeakProgressEventArgs.cs
- __TransparentProxy.cs
- DelayedRegex.cs
- EventMetadata.cs
- BounceEase.cs
- Connector.cs
- TextElement.cs
- ExpandCollapsePattern.cs
- ContentElementAutomationPeer.cs
- TypedTableBaseExtensions.cs
- TitleStyle.cs
- DecoderExceptionFallback.cs
- ScriptingRoleServiceSection.cs
- MasterPageCodeDomTreeGenerator.cs
- SecurityIdentifierElementCollection.cs
- SQLGuidStorage.cs
- OracleTimeSpan.cs
- SymbolMethod.cs
- InitiatorSessionSymmetricMessageSecurityProtocol.cs
- IntegrationExceptionEventArgs.cs
- ISessionStateStore.cs
- MemberDescriptor.cs
- SoapSchemaExporter.cs
- MetadataCacheItem.cs
- ReaderWriterLock.cs
- EncodingNLS.cs
- DbMetaDataColumnNames.cs
- RetrieveVirtualItemEventArgs.cs
- StorageAssociationSetMapping.cs
- AsyncStreamReader.cs
- CodeArrayIndexerExpression.cs
- WebSysDisplayNameAttribute.cs
- DateTimePicker.cs
- DataControlFieldCollection.cs
- OdbcTransaction.cs
- FlowNode.cs
- DependencyPropertyDescriptor.cs
- TextPointerBase.cs
- WsdlBuildProvider.cs
- RuntimeWrappedException.cs
- Rect3D.cs
- SoapProtocolReflector.cs
- BehaviorEditorPart.cs
- ReflectionPermission.cs
- ExpressionBuilder.cs