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
- ToolStripControlHost.cs
- XmlIgnoreAttribute.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- BamlReader.cs
- SimpleFieldTemplateFactory.cs
- DelegateCompletionCallbackWrapper.cs
- GatewayIPAddressInformationCollection.cs
- __ConsoleStream.cs
- DragSelectionMessageFilter.cs
- TextBreakpoint.cs
- BooleanStorage.cs
- SQLByteStorage.cs
- CompositeTypefaceMetrics.cs
- NumberEdit.cs
- FixedFindEngine.cs
- EventLogPermissionEntry.cs
- Marshal.cs
- AppDomainFactory.cs
- DemultiplexingDispatchMessageFormatter.cs
- XmlName.cs
- PathSegment.cs
- TypeDependencyAttribute.cs
- HttpHandlerActionCollection.cs
- SupportingTokenParameters.cs
- TextTreeInsertUndoUnit.cs
- FieldBuilder.cs
- ClientEventManager.cs
- SqlCacheDependencySection.cs
- SByte.cs
- DataGridViewSelectedRowCollection.cs
- UnionCodeGroup.cs
- QilCloneVisitor.cs
- ListChangedEventArgs.cs
- SQLDecimalStorage.cs
- HttpWrapper.cs
- COM2PictureConverter.cs
- Set.cs
- Interlocked.cs
- TreeViewAutomationPeer.cs
- XamlTemplateSerializer.cs
- XmlSchemaDocumentation.cs
- IImplicitResourceProvider.cs
- ActivityTypeDesigner.xaml.cs
- peernodestatemanager.cs
- XmlText.cs
- ApplicationId.cs
- VerificationAttribute.cs
- SymbolEqualComparer.cs
- EntitySqlQueryCacheEntry.cs
- XsltOutput.cs
- UnaryExpression.cs
- SByte.cs
- ItemsPresenter.cs
- DecoderBestFitFallback.cs
- SelectionRangeConverter.cs
- LostFocusEventManager.cs
- DataBoundControlAdapter.cs
- MetadataArtifactLoaderCompositeResource.cs
- InplaceBitmapMetadataWriter.cs
- CellCreator.cs
- UIEndRequest.cs
- DefaultExpressionVisitor.cs
- BitmapEffectDrawingContent.cs
- TemplateApplicationHelper.cs
- Oid.cs
- PropertyManager.cs
- SimpleType.cs
- Type.cs
- DataGridColumnFloatingHeader.cs
- altserialization.cs
- CheckedPointers.cs
- GridViewRowCollection.cs
- SQlBooleanStorage.cs
- NamespaceMapping.cs
- DataTable.cs
- TextTreeText.cs
- DispatchOperation.cs
- ListManagerBindingsCollection.cs
- _SafeNetHandles.cs
- EmbeddedMailObjectsCollection.cs
- LineGeometry.cs
- WinEventQueueItem.cs
- Encoder.cs
- CompositeDataBoundControl.cs
- UrlAuthorizationModule.cs
- FlowDocumentView.cs
- SystemUdpStatistics.cs
- ConversionContext.cs
- DesignerDataParameter.cs
- FigureParaClient.cs
- WebBrowserDocumentCompletedEventHandler.cs
- PointAnimation.cs
- ThreadNeutralSemaphore.cs
- SspiWrapper.cs
- ThumbAutomationPeer.cs
- PartialCachingControl.cs
- EventLogLink.cs
- WebProxyScriptElement.cs
- ContentElementAutomationPeer.cs
- SecurityTokenException.cs