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
- ViewManagerAttribute.cs
- BindToObject.cs
- ImplicitInputBrush.cs
- AuthStoreRoleProvider.cs
- ConfigurationValue.cs
- HttpModuleAction.cs
- TypefaceCollection.cs
- Part.cs
- HttpListenerResponse.cs
- SoapConverter.cs
- ColorConvertedBitmap.cs
- RoleManagerSection.cs
- BevelBitmapEffect.cs
- SiteOfOriginPart.cs
- RegexRunner.cs
- AutoGeneratedField.cs
- AppliedDeviceFiltersDialog.cs
- LongSumAggregationOperator.cs
- ObjectStorage.cs
- DataGridViewHeaderCell.cs
- StickyNote.cs
- Pipe.cs
- BindingCompleteEventArgs.cs
- StylusPlugInCollection.cs
- CodeSnippetTypeMember.cs
- WebPartConnectionsConfigureVerb.cs
- SchemaElementDecl.cs
- TailPinnedEventArgs.cs
- PropertyGridEditorPart.cs
- TableCell.cs
- BindingCollectionElement.cs
- Int16.cs
- EnumBuilder.cs
- PaginationProgressEventArgs.cs
- SecurityUniqueId.cs
- HelpInfo.cs
- WebConfigurationHost.cs
- DataServiceResponse.cs
- WizardDesigner.cs
- RadioButtonAutomationPeer.cs
- ApplicationGesture.cs
- RemoveStoryboard.cs
- MgmtConfigurationRecord.cs
- SkinBuilder.cs
- ToolStripMenuItemCodeDomSerializer.cs
- CodeNamespaceImport.cs
- MemberCollection.cs
- InterleavedZipPartStream.cs
- DocumentReference.cs
- RequiredAttributeAttribute.cs
- PrivacyNoticeBindingElement.cs
- FixUp.cs
- HttpListener.cs
- ServiceMetadataBehavior.cs
- ValidationVisibilityAttribute.cs
- RowUpdatedEventArgs.cs
- JsonCollectionDataContract.cs
- ToolStripOverflow.cs
- ViewRendering.cs
- ValidatorUtils.cs
- RequestCachingSection.cs
- ToolBarTray.cs
- SimplePropertyEntry.cs
- PasswordRecoveryAutoFormat.cs
- NavigationService.cs
- MimeParameters.cs
- ThrowOnMultipleAssignment.cs
- PositiveTimeSpanValidatorAttribute.cs
- ButtonPopupAdapter.cs
- UnmanagedMarshal.cs
- Expression.cs
- TypeListConverter.cs
- GifBitmapEncoder.cs
- SQLConvert.cs
- invalidudtexception.cs
- TraceHwndHost.cs
- LineBreakRecord.cs
- SafeFileMappingHandle.cs
- TriggerActionCollection.cs
- SemanticAnalyzer.cs
- FixedDocument.cs
- ContextMarshalException.cs
- RegistryPermission.cs
- Models.cs
- VisualProxy.cs
- BuildDependencySet.cs
- NodeLabelEditEvent.cs
- AlternationConverter.cs
- ControlCodeDomSerializer.cs
- DataColumn.cs
- GiveFeedbackEvent.cs
- DESCryptoServiceProvider.cs
- InputLanguageSource.cs
- TypeExtensions.cs
- CommandBindingCollection.cs
- XmlSchemas.cs
- InstancePersistence.cs
- GuidelineSet.cs
- ContentAlignmentEditor.cs
- RtfFormatStack.cs