Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Services / Monitoring / system / Diagnosticts / Design / StringDictionaryCodeDomSerializer.cs / 1 / StringDictionaryCodeDomSerializer.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* */ namespace System.Diagnostics.Design { using System; using System.Design; using System.CodeDom; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Diagnostics; using System.Reflection; using System.ComponentModel.Design.Serialization; using System.Collections.Specialized; ////// /// This serializer serializes string dictionaries. /// internal class StringDictionaryCodeDomSerializer : CodeDomSerializer { ////// /// This method takes a CodeDomObject and deserializes into a real object. /// We don't do anything here. /// public override object Deserialize(IDesignerSerializationManager manager, object codeObject) { Debug.Fail("Don't expect this to be called."); return null; } ////// /// Serializes the given object into a CodeDom object. /// public override object Serialize(IDesignerSerializationManager manager, object value) { object result = null; StringDictionary dictionary = value as StringDictionary; if (dictionary != null) { object context = manager.Context.Current; ExpressionContext exp = context as ExpressionContext; if (exp != null) { if (exp.Owner == value) { context = exp.Expression; } } // we can only serialize if we have a CodePropertyReferenceExpression CodePropertyReferenceExpression propRef = context as CodePropertyReferenceExpression; if (propRef != null) { // get the object with the property we're setting object targetObject = DeserializeExpression(manager, null, propRef.TargetObject); if (targetObject != null) { // get the PropertyDescriptor of the property we're setting PropertyDescriptor prop = TypeDescriptor.GetProperties(targetObject)[propRef.PropertyName]; if (prop != null) { // okay, we have the property and we have the StringDictionary, now we generate // a line like this (c# example): // myObject.strDictProp["key"] = "value"; // for each key/value pair in the StringDictionary CodeStatementCollection statements = new CodeStatementCollection(); CodeMethodReferenceExpression methodRef = new CodeMethodReferenceExpression(propRef, "Add"); foreach (DictionaryEntry entry in dictionary) { // serialize the key (in most languages this will look like "key") CodeExpression serializedKey = SerializeToExpression(manager, entry.Key); // serialize the value (in most languages this will look like "value") CodeExpression serializedValue = SerializeToExpression(manager, entry.Value); // serialize the method call (prop.Add("key", "value")) if (serializedKey != null && serializedValue != null) { CodeMethodInvokeExpression statement = new CodeMethodInvokeExpression(); statement.Method = methodRef; statement.Parameters.Add(serializedKey); statement.Parameters.Add(serializedValue); statements.Add(statement); } } result = statements; } } } } else { // 'value' is not a StringDictionary. What should we do? } return result; } } } // 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
- HexParser.cs
- ExceptionNotification.cs
- CompositeTypefaceMetrics.cs
- EdmType.cs
- HebrewNumber.cs
- MouseButtonEventArgs.cs
- smtppermission.cs
- DateTimeUtil.cs
- AccessorTable.cs
- FlowDocumentFormatter.cs
- RangeValuePattern.cs
- ServiceReference.cs
- Utils.cs
- ClosableStream.cs
- KeyValueConfigurationElement.cs
- XMLSyntaxException.cs
- ControlIdConverter.cs
- ValidatorCompatibilityHelper.cs
- ArrayWithOffset.cs
- ServiceNameElement.cs
- RegexTypeEditor.cs
- DbConnectionPoolGroupProviderInfo.cs
- GatewayDefinition.cs
- NamespaceList.cs
- ContentElement.cs
- LoginName.cs
- XmlParserContext.cs
- XmlUrlResolver.cs
- CredentialCache.cs
- TabPageDesigner.cs
- PeerPresenceInfo.cs
- BufferModeSettings.cs
- CaseCqlBlock.cs
- OdbcException.cs
- ComboBox.cs
- Misc.cs
- AutomationProperty.cs
- RectAnimationClockResource.cs
- CodeAttributeDeclaration.cs
- XsdDuration.cs
- AsyncOperation.cs
- QilVisitor.cs
- EDesignUtil.cs
- XmlUtil.cs
- PageParser.cs
- UIPropertyMetadata.cs
- ApplicationCommands.cs
- RootProfilePropertySettingsCollection.cs
- DateTime.cs
- DesignSurfaceCollection.cs
- ImageSource.cs
- DrawingContext.cs
- TabletCollection.cs
- NonParentingControl.cs
- PerformanceCounterLib.cs
- AbsoluteQuery.cs
- ComponentChangedEvent.cs
- ReferentialConstraintRoleElement.cs
- PKCS1MaskGenerationMethod.cs
- PointConverter.cs
- TemplateXamlTreeBuilder.cs
- HttpCachePolicy.cs
- EntityDataSourceSelectedEventArgs.cs
- Rules.cs
- LinqExpressionNormalizer.cs
- TimeIntervalCollection.cs
- ActivityPreviewDesigner.cs
- WebRequestModuleElementCollection.cs
- JsonFormatGeneratorStatics.cs
- SoapIgnoreAttribute.cs
- Stackframe.cs
- HttpWebRequestElement.cs
- ColorAnimation.cs
- RelationshipWrapper.cs
- Queue.cs
- XmlMembersMapping.cs
- Msec.cs
- MediaPlayerState.cs
- ISAPIWorkerRequest.cs
- ProtocolsConfigurationEntry.cs
- HyperLink.cs
- DataObjectPastingEventArgs.cs
- coordinatorfactory.cs
- PointConverter.cs
- Encoder.cs
- ScriptModule.cs
- SortableBindingList.cs
- SqlConnectionString.cs
- VersionedStream.cs
- ApplicationFileCodeDomTreeGenerator.cs
- ExcCanonicalXml.cs
- DataGridCellAutomationPeer.cs
- GridViewEditEventArgs.cs
- ViewGenerator.cs
- TemplateComponentConnector.cs
- SimpleHandlerFactory.cs
- ForeignConstraint.cs
- ConsumerConnectionPoint.cs
- ParserStack.cs
- LinqDataSourceInsertEventArgs.cs