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
- Thickness.cs
- ThicknessKeyFrameCollection.cs
- oledbconnectionstring.cs
- RegistrationServices.cs
- GridToolTip.cs
- WmlValidatorAdapter.cs
- ResponseStream.cs
- Encoder.cs
- AnnotationHighlightLayer.cs
- DocumentViewer.cs
- TransformedBitmap.cs
- Vector3DCollectionValueSerializer.cs
- DataGridViewTextBoxEditingControl.cs
- Script.cs
- MessagePropertyDescriptionCollection.cs
- SparseMemoryStream.cs
- WebPartTransformer.cs
- XmlAttribute.cs
- ValueHandle.cs
- GroupByExpressionRewriter.cs
- XomlCompiler.cs
- WebControlParameterProxy.cs
- AlphaSortedEnumConverter.cs
- SR.cs
- ComponentResourceKey.cs
- SqlXml.cs
- BufferAllocator.cs
- HtmlTableRowCollection.cs
- HttpContextServiceHost.cs
- XPathNodePointer.cs
- DocumentViewerHelper.cs
- LogConverter.cs
- EventSinkActivityDesigner.cs
- JsonReaderWriterFactory.cs
- ConstraintManager.cs
- designeractionlistschangedeventargs.cs
- XsltException.cs
- ContextMenuStrip.cs
- FormatSettings.cs
- SqlDataRecord.cs
- RequestUriProcessor.cs
- SimpleRecyclingCache.cs
- IPPacketInformation.cs
- MenuItemStyle.cs
- WebConfigurationManager.cs
- CompilationSection.cs
- ByteAnimationUsingKeyFrames.cs
- ReadWriteSpinLock.cs
- UserNameSecurityToken.cs
- FlowNode.cs
- MailHeaderInfo.cs
- HtmlShim.cs
- CodeGroup.cs
- LinqDataSource.cs
- PointF.cs
- ManagementOperationWatcher.cs
- SQLDecimal.cs
- ListenerAdapterBase.cs
- AuthenticationConfig.cs
- securitymgrsite.cs
- PointHitTestParameters.cs
- AudioFormatConverter.cs
- DictionaryBase.cs
- QueryRewriter.cs
- JoinCqlBlock.cs
- PropertyMappingExceptionEventArgs.cs
- ImageIndexConverter.cs
- DllNotFoundException.cs
- OdbcConnectionStringbuilder.cs
- BinaryFormatterWriter.cs
- StringInfo.cs
- SecurityMode.cs
- FileStream.cs
- CheckBoxFlatAdapter.cs
- TreeNodeBinding.cs
- ProxyHelper.cs
- PageContentAsyncResult.cs
- SiteOfOriginContainer.cs
- SqlDataSourceStatusEventArgs.cs
- RegexCompiler.cs
- BasePattern.cs
- MethodBuilderInstantiation.cs
- ApplicationManager.cs
- PropertyEmitterBase.cs
- FixedSchema.cs
- TreeViewItem.cs
- ContentElement.cs
- QuaternionAnimation.cs
- StructuredTypeInfo.cs
- SizeLimitedCache.cs
- AddInSegmentDirectoryNotFoundException.cs
- SqlLiftWhereClauses.cs
- Pair.cs
- GrammarBuilderDictation.cs
- entitydatasourceentitysetnameconverter.cs
- Registry.cs
- StylusPoint.cs
- SqlDataSourceCommandEventArgs.cs
- FormsAuthenticationEventArgs.cs
- DiscoveryReferences.cs