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
- HttpWriter.cs
- XmlHierarchicalDataSourceView.cs
- ZipIOBlockManager.cs
- basenumberconverter.cs
- TextRenderer.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- PersistenceIOParticipant.cs
- SqlBuilder.cs
- CellPartitioner.cs
- TopClause.cs
- HttpClientCertificate.cs
- CryptoKeySecurity.cs
- IdentityHolder.cs
- AttributeCollection.cs
- WriteFileContext.cs
- TabControlEvent.cs
- ScopeCompiler.cs
- CheckBoxField.cs
- SpeechRecognizer.cs
- ProxyWebPart.cs
- SqlConnectionString.cs
- ADMembershipProvider.cs
- UrlMappingsModule.cs
- CodeAttributeDeclarationCollection.cs
- XmlAttributeAttribute.cs
- DataGridItemEventArgs.cs
- RegexNode.cs
- Application.cs
- SpeakInfo.cs
- InheritedPropertyDescriptor.cs
- SubpageParaClient.cs
- TextSchema.cs
- Pts.cs
- WeakReferenceEnumerator.cs
- ActionNotSupportedException.cs
- CachedRequestParams.cs
- XamlPointCollectionSerializer.cs
- SystemIcmpV4Statistics.cs
- StretchValidation.cs
- HttpHandlerActionCollection.cs
- IdentityVerifier.cs
- WebResourceAttribute.cs
- ColorConvertedBitmapExtension.cs
- TextFragmentEngine.cs
- FixedSOMPageElement.cs
- BufferBuilder.cs
- DPTypeDescriptorContext.cs
- IsolatedStorageFile.cs
- XmlSchemaComplexContent.cs
- CollectionConverter.cs
- DiscoveryClientDuplexChannel.cs
- WSDualHttpBindingCollectionElement.cs
- ThousandthOfEmRealDoubles.cs
- EntityTypeBase.cs
- ProcessThread.cs
- FactoryGenerator.cs
- DictionaryContent.cs
- CodeCatchClauseCollection.cs
- ParallelDesigner.xaml.cs
- TypeSystem.cs
- FindCriteriaApril2005.cs
- DataTableClearEvent.cs
- TopClause.cs
- StatusBarPanelClickEvent.cs
- Compiler.cs
- StateChangeEvent.cs
- VSWCFServiceContractGenerator.cs
- StrokeNodeEnumerator.cs
- BooleanFunctions.cs
- XsdCachingReader.cs
- TableLayoutPanelCodeDomSerializer.cs
- TypeGeneratedEventArgs.cs
- DocumentViewerBase.cs
- CharacterMetrics.cs
- PassportAuthentication.cs
- TdsParserSafeHandles.cs
- SiblingIterators.cs
- SerialPinChanges.cs
- SpeakCompletedEventArgs.cs
- EditorBrowsableAttribute.cs
- MeshGeometry3D.cs
- AffineTransform3D.cs
- ConstraintEnumerator.cs
- PenLineJoinValidation.cs
- RuntimeArgumentHandle.cs
- DispatcherSynchronizationContext.cs
- SvcMapFile.cs
- GeneralTransform3DGroup.cs
- ResolveNameEventArgs.cs
- InputManager.cs
- CompositionTarget.cs
- XmlAttributeAttribute.cs
- TextRangeProviderWrapper.cs
- ViewPort3D.cs
- _DigestClient.cs
- Zone.cs
- StaticSiteMapProvider.cs
- SizeFConverter.cs
- ConnectionOrientedTransportElement.cs
- UnsafeNativeMethods.cs