Code:
/ DotNET / DotNET / 8.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
- PropertyRef.cs
- UIElement3D.cs
- RectConverter.cs
- InstanceBehavior.cs
- SQLStringStorage.cs
- SqlClientPermission.cs
- webclient.cs
- WorkflowServiceNamespace.cs
- XamlParser.cs
- ToolCreatedEventArgs.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- ScopedMessagePartSpecification.cs
- MoveSizeWinEventHandler.cs
- NativeMethodsCLR.cs
- BitmapSource.cs
- StreamInfo.cs
- MenuEventArgs.cs
- SplitterPanel.cs
- Predicate.cs
- ToolStripComboBox.cs
- DrawingCollection.cs
- ForAllOperator.cs
- PropertyDescriptor.cs
- SubclassTypeValidator.cs
- keycontainerpermission.cs
- InvalidOleVariantTypeException.cs
- StoreItemCollection.Loader.cs
- TemplateLookupAction.cs
- FixedFlowMap.cs
- NamespaceList.cs
- MessageQueueException.cs
- Int64AnimationBase.cs
- ClientSideQueueItem.cs
- MatrixValueSerializer.cs
- FolderNameEditor.cs
- SpotLight.cs
- LogRecordSequence.cs
- WebServiceTypeData.cs
- WebPartVerbsEventArgs.cs
- MissingMemberException.cs
- PipeStream.cs
- ProfilePropertyNameValidator.cs
- RestHandlerFactory.cs
- CustomActivityDesigner.cs
- PersonalizableAttribute.cs
- HandoffBehavior.cs
- MergeFailedEvent.cs
- WindowsTokenRoleProvider.cs
- HitTestParameters3D.cs
- DataGridViewCell.cs
- XomlCompilerError.cs
- Documentation.cs
- WebConfigurationHostFileChange.cs
- Translator.cs
- SqlCacheDependencyDatabase.cs
- TemplateContentLoader.cs
- ReadOnlyCollection.cs
- DoubleLinkListEnumerator.cs
- UnaryExpression.cs
- BinaryMessageEncodingElement.cs
- Decimal.cs
- ToolStripDropDownButton.cs
- DataBindEngine.cs
- Stream.cs
- Separator.cs
- DataGridViewRowsRemovedEventArgs.cs
- SourceFileBuildProvider.cs
- LaxModeSecurityHeaderElementInferenceEngine.cs
- StructuralObject.cs
- RangeValidator.cs
- Point4D.cs
- HttpRawResponse.cs
- AsmxEndpointPickerExtension.cs
- TimeStampChecker.cs
- ExpressionEditorAttribute.cs
- AttributeUsageAttribute.cs
- PriorityBinding.cs
- WebBrowserEvent.cs
- BindingBase.cs
- ChtmlLinkAdapter.cs
- QilFunction.cs
- WsrmMessageInfo.cs
- RelationshipConverter.cs
- CalendarButton.cs
- BookmarkManager.cs
- PropertyBuilder.cs
- ImmComposition.cs
- Misc.cs
- EdmPropertyAttribute.cs
- SamlSerializer.cs
- LinkLabelLinkClickedEvent.cs
- SqlFacetAttribute.cs
- KeyProperty.cs
- XsdBuilder.cs
- HostProtectionPermission.cs
- RowTypePropertyElement.cs
- URLBuilder.cs
- xdrvalidator.cs
- TreeNodeConverter.cs
- ToolStrip.cs