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
- RequestTimeoutManager.cs
- Point3DKeyFrameCollection.cs
- TextServicesContext.cs
- BinaryMethodMessage.cs
- ControlParameter.cs
- Events.cs
- EntityConnection.cs
- GridToolTip.cs
- XmlSchemaType.cs
- TextElementAutomationPeer.cs
- Listbox.cs
- WmlPageAdapter.cs
- Int64AnimationBase.cs
- FrameworkElementFactoryMarkupObject.cs
- DispatcherHooks.cs
- Vector.cs
- DoubleAnimation.cs
- cache.cs
- Gdiplus.cs
- ListBox.cs
- ContentValidator.cs
- ColorPalette.cs
- DataGridViewRowPrePaintEventArgs.cs
- UnmanagedMemoryStream.cs
- SHA256.cs
- ReliableDuplexSessionChannel.cs
- LightweightEntityWrapper.cs
- ExeContext.cs
- ListenDesigner.cs
- Tokenizer.cs
- CodeVariableReferenceExpression.cs
- HttpPostServerProtocol.cs
- EntityStoreSchemaGenerator.cs
- EtwTrace.cs
- SendMailErrorEventArgs.cs
- AttributeTableBuilder.cs
- Span.cs
- NetworkInformationPermission.cs
- RelativeSource.cs
- SoundPlayer.cs
- TypeDescriptionProvider.cs
- WindowsScroll.cs
- util.cs
- designeractionlistschangedeventargs.cs
- DataBoundLiteralControl.cs
- PartialArray.cs
- MemberExpressionHelper.cs
- RecordConverter.cs
- DataGridViewCellCancelEventArgs.cs
- NativeMethods.cs
- _OverlappedAsyncResult.cs
- EdmError.cs
- Literal.cs
- SortExpressionBuilder.cs
- EventLog.cs
- CheckBox.cs
- DesignerActionTextItem.cs
- HuffmanTree.cs
- ALinqExpressionVisitor.cs
- CharEntityEncoderFallback.cs
- DelegateSerializationHolder.cs
- RecordBuilder.cs
- XamlTreeBuilder.cs
- WindowsBrush.cs
- DBBindings.cs
- AffineTransform3D.cs
- InputMethodStateChangeEventArgs.cs
- ElementsClipboardData.cs
- UnsafeNativeMethodsCLR.cs
- WinFormsUtils.cs
- RootBrowserWindow.cs
- ItemList.cs
- Image.cs
- UniqueIdentifierService.cs
- FaultDescriptionCollection.cs
- ApplicationCommands.cs
- ToolboxComponentsCreatingEventArgs.cs
- OracleInternalConnection.cs
- LogicalTreeHelper.cs
- PageVisual.cs
- XmlSchemaSubstitutionGroup.cs
- Annotation.cs
- DependencyProperty.cs
- GACIdentityPermission.cs
- ViewGenerator.cs
- ApplicationServicesHostFactory.cs
- MailMessage.cs
- CfgRule.cs
- TdsParameterSetter.cs
- PackagingUtilities.cs
- InvalidEnumArgumentException.cs
- PaperSource.cs
- PageEventArgs.cs
- QueueProcessor.cs
- PersistenceContextEnlistment.cs
- NamespaceMapping.cs
- Freezable.cs
- IntranetCredentialPolicy.cs
- RelatedEnd.cs
- _NTAuthentication.cs