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
- RotateTransform3D.cs
- DecoderReplacementFallback.cs
- Paragraph.cs
- SmiSettersStream.cs
- TextTreeRootTextBlock.cs
- RegexCompiler.cs
- RegexReplacement.cs
- EmbeddedMailObject.cs
- InternalResources.cs
- LineGeometry.cs
- ObjectListComponentEditor.cs
- SmiEventSink_DeferedProcessing.cs
- EntityStoreSchemaFilterEntry.cs
- ArrayExtension.cs
- FactoryRecord.cs
- ArcSegment.cs
- InstanceNormalEvent.cs
- VisualTreeUtils.cs
- ArrangedElement.cs
- WebPartEditorOkVerb.cs
- TimerElapsedEvenArgs.cs
- LinkedResourceCollection.cs
- AutomationProperties.cs
- _NTAuthentication.cs
- TransactionScope.cs
- InitializerFacet.cs
- StyleReferenceConverter.cs
- ImageClickEventArgs.cs
- ProfileInfo.cs
- SQLUtility.cs
- ReadWriteSpinLock.cs
- ReadOnlyCollectionBase.cs
- SymLanguageType.cs
- HybridWebProxyFinder.cs
- ToolStripDropTargetManager.cs
- ReferentialConstraint.cs
- AgileSafeNativeMemoryHandle.cs
- URLMembershipCondition.cs
- HtmlControl.cs
- StatusStrip.cs
- StateMachineExecutionState.cs
- XPathCompileException.cs
- UrlMapping.cs
- Adorner.cs
- GlobalDataBindingHandler.cs
- DescendantOverDescendantQuery.cs
- ContentPresenter.cs
- ETagAttribute.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- CodeGen.cs
- RtType.cs
- CalendarTable.cs
- PenContexts.cs
- GroupByExpressionRewriter.cs
- ScriptControl.cs
- InstanceCreationEditor.cs
- DataContractAttribute.cs
- BCryptSafeHandles.cs
- CharUnicodeInfo.cs
- NestPullup.cs
- RemoteX509Token.cs
- WindowsPen.cs
- TemplatedMailWebEventProvider.cs
- DynamicEndpointElement.cs
- TimeoutException.cs
- CollectionBase.cs
- PseudoWebRequest.cs
- Int32RectConverter.cs
- SerialPort.cs
- NavigationEventArgs.cs
- LingerOption.cs
- PageCatalogPart.cs
- PageContentAsyncResult.cs
- DataKey.cs
- OleDbTransaction.cs
- HtmlForm.cs
- KnownTypesProvider.cs
- UTF32Encoding.cs
- UrlRoutingModule.cs
- BitmapMetadataEnumerator.cs
- PropertyRecord.cs
- ResXResourceWriter.cs
- ComboBox.cs
- GeometryModel3D.cs
- ThreadTrace.cs
- Part.cs
- DbBuffer.cs
- CompositionTarget.cs
- CompilerResults.cs
- TextTreeUndo.cs
- CuspData.cs
- XamlRtfConverter.cs
- WebPartTransformer.cs
- CaseInsensitiveComparer.cs
- IgnoreSectionHandler.cs
- SqlClientFactory.cs
- GroupStyle.cs
- ValidationHelpers.cs
- ApplyTemplatesAction.cs
- PrintDialogException.cs