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
- CalendarData.cs
- _ListenerResponseStream.cs
- InstanceDataCollectionCollection.cs
- DiagnosticStrings.cs
- Configuration.cs
- ListViewAutomationPeer.cs
- FontWeight.cs
- SimpleWebHandlerParser.cs
- ValueType.cs
- ConnectionStringsExpressionEditor.cs
- PageRouteHandler.cs
- RSAProtectedConfigurationProvider.cs
- DataGridViewTextBoxCell.cs
- IssuanceLicense.cs
- Int64Animation.cs
- ToolBar.cs
- SqlTypeSystemProvider.cs
- ParseHttpDate.cs
- Quad.cs
- AmbiguousMatchException.cs
- SqlBinder.cs
- BuildManager.cs
- StreamWriter.cs
- DetailsView.cs
- TextEditorSelection.cs
- PackWebResponse.cs
- RemotingClientProxy.cs
- MailWebEventProvider.cs
- PerformanceCounterPermissionAttribute.cs
- DrawListViewColumnHeaderEventArgs.cs
- ButtonChrome.cs
- CompensatableSequenceActivity.cs
- CopyAttributesAction.cs
- SqlNodeAnnotations.cs
- CounterCreationDataConverter.cs
- DataGridRow.cs
- SizeLimitedCache.cs
- AndCondition.cs
- XamlSerializationHelper.cs
- DivideByZeroException.cs
- EventLogPermissionEntry.cs
- XmlWrappingReader.cs
- handlecollector.cs
- complextypematerializer.cs
- OdbcInfoMessageEvent.cs
- TypeInitializationException.cs
- ValueCollectionParameterReader.cs
- Crypto.cs
- TimeSpanStorage.cs
- BindingsCollection.cs
- SchemaElementDecl.cs
- PositiveTimeSpanValidatorAttribute.cs
- DesignerVerb.cs
- FileCodeGroup.cs
- ProfessionalColors.cs
- itemelement.cs
- CodeCompiler.cs
- ParamArrayAttribute.cs
- ApplicationSecurityInfo.cs
- MobileTemplatedControlDesigner.cs
- MissingMethodException.cs
- DebugHandleTracker.cs
- QilName.cs
- EventSource.cs
- SQLDoubleStorage.cs
- EntityDataSourceState.cs
- FileStream.cs
- SharedStatics.cs
- EdmConstants.cs
- MobileCapabilities.cs
- LayoutManager.cs
- Html32TextWriter.cs
- ValidationSummary.cs
- ImageButton.cs
- COM2PropertyBuilderUITypeEditor.cs
- Util.cs
- Stack.cs
- SrgsText.cs
- SubpageParaClient.cs
- TableLayoutRowStyleCollection.cs
- DrawingContextWalker.cs
- XmlValidatingReaderImpl.cs
- ComponentDesigner.cs
- EntityCommandDefinition.cs
- EntityDataSourceContainerNameConverter.cs
- TypeContext.cs
- MultiPropertyDescriptorGridEntry.cs
- XmlnsCache.cs
- NameValueFileSectionHandler.cs
- ImageListStreamer.cs
- X509ChainPolicy.cs
- DbConnectionPoolOptions.cs
- SessionStateModule.cs
- XXXInfos.cs
- HistoryEventArgs.cs
- AdapterDictionary.cs
- Popup.cs
- Oid.cs
- ActivationArguments.cs
- QilXmlReader.cs