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
- HostedHttpTransportManager.cs
- CapabilitiesUse.cs
- DataRow.cs
- TimeSpanConverter.cs
- QueryContinueDragEventArgs.cs
- SelectorItemAutomationPeer.cs
- RegexCode.cs
- WebControlAdapter.cs
- ImageMapEventArgs.cs
- ProcessStartInfo.cs
- ArrayMergeHelper.cs
- PageCatalogPart.cs
- UInt64Converter.cs
- UInt32Storage.cs
- ComponentConverter.cs
- CompilerTypeWithParams.cs
- SettingsPropertyValue.cs
- DataSetMappper.cs
- DisplayInformation.cs
- ListViewDataItem.cs
- Rss20ItemFormatter.cs
- ToolStripSettings.cs
- EtwTrackingBehavior.cs
- Range.cs
- FilteredReadOnlyMetadataCollection.cs
- RawStylusInputCustomDataList.cs
- XmlNodeChangedEventArgs.cs
- SchemaContext.cs
- Hash.cs
- TextDataBindingHandler.cs
- InheritanceAttribute.cs
- KeyToListMap.cs
- ValidatedControlConverter.cs
- DocumentViewerBaseAutomationPeer.cs
- ToolStripItemDesigner.cs
- dataprotectionpermission.cs
- MetadataCache.cs
- FirstMatchCodeGroup.cs
- BufferBuilder.cs
- DataServiceCollectionOfT.cs
- WebPartCloseVerb.cs
- HttpPostServerProtocol.cs
- ButtonStandardAdapter.cs
- AssemblyCollection.cs
- CollectionViewSource.cs
- TextFindEngine.cs
- NegotiateStream.cs
- FixUpCollection.cs
- UTF32Encoding.cs
- ListViewCancelEventArgs.cs
- Color.cs
- SettingsProperty.cs
- CapabilitiesUse.cs
- TaskFormBase.cs
- ChannelSinkStacks.cs
- SweepDirectionValidation.cs
- TimeSpanStorage.cs
- ProxyWebPart.cs
- PrinterResolution.cs
- VisualTreeUtils.cs
- StrongName.cs
- OdbcEnvironmentHandle.cs
- TransactionManager.cs
- HtmlContainerControl.cs
- ListViewCommandEventArgs.cs
- PropertyConverter.cs
- UInt32Converter.cs
- AttributeEmitter.cs
- RectIndependentAnimationStorage.cs
- MemberJoinTreeNode.cs
- ContractMapping.cs
- Drawing.cs
- AnimatedTypeHelpers.cs
- PageCopyCount.cs
- EventSinkHelperWriter.cs
- DefaultPropertyAttribute.cs
- ServicePointManager.cs
- RawStylusInputCustomData.cs
- SafeRightsManagementQueryHandle.cs
- ProcessInfo.cs
- InheritedPropertyChangedEventArgs.cs
- ModelProperty.cs
- XPathAncestorIterator.cs
- StateManager.cs
- CalendarTable.cs
- ToolboxService.cs
- sortedlist.cs
- UrlPropertyAttribute.cs
- ExpressionPrefixAttribute.cs
- Inline.cs
- FixedSOMTextRun.cs
- OpCopier.cs
- ProfileBuildProvider.cs
- PropertyRef.cs
- RowToFieldTransformer.cs
- Ray3DHitTestResult.cs
- VerticalAlignConverter.cs
- DataGridViewLinkColumn.cs
- _CommandStream.cs
- JoinSymbol.cs