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
- OrderPreservingSpoolingTask.cs
- CookieProtection.cs
- XmlTextAttribute.cs
- CopyOfAction.cs
- Activator.cs
- OutgoingWebRequestContext.cs
- CaseDesigner.xaml.cs
- MulticastDelegate.cs
- OutputScopeManager.cs
- ArrayWithOffset.cs
- SecurityPolicyVersion.cs
- StrokeRenderer.cs
- SemanticResolver.cs
- InterleavedZipPartStream.cs
- EventWaitHandleSecurity.cs
- SolidColorBrush.cs
- ThicknessConverter.cs
- SmtpDigestAuthenticationModule.cs
- NumericExpr.cs
- Compiler.cs
- WebPermission.cs
- XamlDesignerSerializationManager.cs
- AnnotationStore.cs
- RtfToXamlLexer.cs
- OrthographicCamera.cs
- WorkflowNamespace.cs
- ExpandableObjectConverter.cs
- ThemeDictionaryExtension.cs
- RemotingConfigParser.cs
- Operator.cs
- TreeNodeCollection.cs
- QueryPrefixOp.cs
- GregorianCalendar.cs
- SqlRetyper.cs
- PassportIdentity.cs
- QueryStringParameter.cs
- TextEditor.cs
- DBConnection.cs
- BuildProvidersCompiler.cs
- WebZone.cs
- InternalResources.cs
- ImageFormatConverter.cs
- KeysConverter.cs
- BindingGroup.cs
- CommandValueSerializer.cs
- TryLoadRunnableWorkflowCommand.cs
- UInt64Storage.cs
- Serializer.cs
- ToolStripRenderEventArgs.cs
- xdrvalidator.cs
- BitmapFrame.cs
- URLBuilder.cs
- URLAttribute.cs
- SymmetricCryptoHandle.cs
- CLSCompliantAttribute.cs
- login.cs
- IPAddress.cs
- TextDecorationCollection.cs
- ConfigurationConverterBase.cs
- TextOptionsInternal.cs
- PenLineJoinValidation.cs
- ProcessThread.cs
- AdRotator.cs
- DoubleCollection.cs
- DefaultIfEmptyQueryOperator.cs
- WindowsSecurityToken.cs
- ByteViewer.cs
- MasterPageBuildProvider.cs
- SqlConnectionHelper.cs
- XmlSchemaSubstitutionGroup.cs
- NonClientArea.cs
- CanonicalFormWriter.cs
- OperatingSystem.cs
- ParsedRoute.cs
- SortAction.cs
- Model3D.cs
- DependencyPropertyConverter.cs
- __Filters.cs
- WebPartAuthorizationEventArgs.cs
- Relationship.cs
- TagPrefixInfo.cs
- ToolStripCustomTypeDescriptor.cs
- TypographyProperties.cs
- CfgArc.cs
- SqlUserDefinedTypeAttribute.cs
- PerformanceCountersElement.cs
- Int32Collection.cs
- PeerDuplexChannel.cs
- NullableLongMinMaxAggregationOperator.cs
- RtfToXamlReader.cs
- CachedBitmap.cs
- TrustManager.cs
- TraceContext.cs
- WebPartMenuStyle.cs
- InputLanguageProfileNotifySink.cs
- codemethodreferenceexpression.cs
- CommonProperties.cs
- SqlMethodAttribute.cs
- LongTypeConverter.cs
- ControlTemplate.cs