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
- DashStyle.cs
- ToolboxDataAttribute.cs
- GridViewRowPresenterBase.cs
- GridViewAutoFormat.cs
- Compiler.cs
- XmlDocumentFragment.cs
- BitArray.cs
- XPathExpr.cs
- ErrorEventArgs.cs
- CellParaClient.cs
- InternalSafeNativeMethods.cs
- InheritanceContextChangedEventManager.cs
- ProviderUtil.cs
- XPathQueryGenerator.cs
- XmlSubtreeReader.cs
- CanonicalFontFamilyReference.cs
- DataObjectSettingDataEventArgs.cs
- PageTrueTypeFont.cs
- DispatcherHooks.cs
- DeobfuscatingStream.cs
- WindowsFormsHelpers.cs
- CodePrimitiveExpression.cs
- DataObject.cs
- NumericUpDownAccelerationCollection.cs
- PropagatorResult.cs
- ServiceXNameTypeConverter.cs
- InputLanguageSource.cs
- Size3D.cs
- InputBindingCollection.cs
- LockCookie.cs
- SafeFileMappingHandle.cs
- XmlRawWriterWrapper.cs
- QueuedDeliveryRequirementsMode.cs
- StoreItemCollection.cs
- ProgressChangedEventArgs.cs
- ArraySegment.cs
- CorrelationManager.cs
- TemplateContainer.cs
- PagesSection.cs
- IPHostEntry.cs
- ContextActivityUtils.cs
- Util.cs
- IOException.cs
- WindowsListViewItemCheckBox.cs
- NetTcpSection.cs
- SettingsContext.cs
- HyperLinkColumn.cs
- handlecollector.cs
- RewritingValidator.cs
- TabOrder.cs
- AppModelKnownContentFactory.cs
- OpCopier.cs
- XmlSchemaObjectCollection.cs
- XmlObjectSerializerWriteContextComplex.cs
- RelatedEnd.cs
- NameValuePair.cs
- ExtenderProvidedPropertyAttribute.cs
- TypeBuilder.cs
- TerminatorSinks.cs
- LifetimeServices.cs
- StorageEntitySetMapping.cs
- GeometryHitTestResult.cs
- TypeDelegator.cs
- PerformanceCountersBase.cs
- XmlComment.cs
- WizardPanelChangingEventArgs.cs
- BooleanFunctions.cs
- PropertyGroupDescription.cs
- ControlValuePropertyAttribute.cs
- PagerStyle.cs
- PrinterUnitConvert.cs
- XPathConvert.cs
- InertiaTranslationBehavior.cs
- SafeViewOfFileHandle.cs
- RegexInterpreter.cs
- WindowsTreeView.cs
- XPathSingletonIterator.cs
- WebPartCatalogAddVerb.cs
- PerformanceCounter.cs
- ImageIndexConverter.cs
- TypeBuilder.cs
- DataGridViewColumnCollectionDialog.cs
- JoinSymbol.cs
- ListControl.cs
- Rotation3DAnimation.cs
- UnsafeNativeMethods.cs
- UpdateTranslator.cs
- TableLayout.cs
- SimpleBitVector32.cs
- TextViewBase.cs
- LazyTextWriterCreator.cs
- TdsParserSafeHandles.cs
- PaintEvent.cs
- SpeechRecognizer.cs
- ObjectDataSourceWizardForm.cs
- DataObjectAttribute.cs
- ChannelSinkStacks.cs
- ObservableDictionary.cs
- CountdownEvent.cs
- OwnerDrawPropertyBag.cs