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
- DesignerPerfEventProvider.cs
- PrintDocument.cs
- OdbcTransaction.cs
- TemplateParser.cs
- TextTreeDeleteContentUndoUnit.cs
- PipeStream.cs
- ArraySortHelper.cs
- Shape.cs
- MaskDesignerDialog.cs
- AuthenticationSection.cs
- Common.cs
- TrackingCondition.cs
- Button.cs
- DbDataSourceEnumerator.cs
- FloaterBaseParaClient.cs
- MailMessageEventArgs.cs
- DataServiceQueryException.cs
- ContractHandle.cs
- ReadOnlyObservableCollection.cs
- ResolveMatchesMessage11.cs
- WebPartCatalogAddVerb.cs
- SemaphoreFullException.cs
- WrappedDispatcherException.cs
- DefaultPrintController.cs
- TreeBuilderXamlTranslator.cs
- XmlDictionaryReaderQuotas.cs
- EventLogEntryCollection.cs
- QuotaExceededException.cs
- HandlerBase.cs
- PrintPreviewControl.cs
- SoapMessage.cs
- AppDomainShutdownMonitor.cs
- SortedList.cs
- querybuilder.cs
- BulletedListEventArgs.cs
- BlockCollection.cs
- PropertyMap.cs
- XPathEmptyIterator.cs
- BooleanKeyFrameCollection.cs
- SmtpLoginAuthenticationModule.cs
- BulletChrome.cs
- ByteStack.cs
- ObjectSecurityT.cs
- HttpResponse.cs
- _DomainName.cs
- TemplatePagerField.cs
- XPathCompileException.cs
- TreeChangeInfo.cs
- SynchronizationScope.cs
- TextBox.cs
- SchemaImporterExtensionElement.cs
- DataGridViewElement.cs
- ResolveCompletedEventArgs.cs
- HandlerBase.cs
- datacache.cs
- baseaxisquery.cs
- Rights.cs
- ClientApiGenerator.cs
- HttpResponseBase.cs
- UrlRoutingHandler.cs
- _SslSessionsCache.cs
- ActivityScheduledQuery.cs
- AdornerLayer.cs
- HandlerFactoryCache.cs
- CLSCompliantAttribute.cs
- DataMemberFieldEditor.cs
- ListMarkerSourceInfo.cs
- EncoderExceptionFallback.cs
- GenericUriParser.cs
- RelationshipWrapper.cs
- NullableDoubleMinMaxAggregationOperator.cs
- KnownTypesHelper.cs
- DockProviderWrapper.cs
- WindowsListViewScroll.cs
- StringAnimationBase.cs
- XmlSchemaAttribute.cs
- BitmapEffectInputConnector.cs
- OdbcInfoMessageEvent.cs
- XsltSettings.cs
- MemberHolder.cs
- Aes.cs
- MetaType.cs
- SettingsContext.cs
- LogEntryUtils.cs
- ProfilePropertySettings.cs
- SQLDecimal.cs
- NumberSubstitution.cs
- ProviderUtil.cs
- LOSFormatter.cs
- AlphabeticalEnumConverter.cs
- RuleInfoComparer.cs
- PropertyGroupDescription.cs
- MasterPageParser.cs
- OperationDescriptionCollection.cs
- SerializationAttributes.cs
- ColorConverter.cs
- Parameter.cs
- SwitchElementsCollection.cs
- ExpressionLexer.cs
- ToggleButtonAutomationPeer.cs