Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Runtime / Serialization / Json / JsonObjectDataContract.cs / 1305376 / JsonObjectDataContract.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Runtime.Serialization.Json { using System.Xml; using System.ServiceModel; using System.Runtime.Serialization; using System.Globalization; class JsonObjectDataContract : JsonDataContract { public JsonObjectDataContract(DataContract traditionalDataContract) : base(traditionalDataContract) { } public override object ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) { object obj; string contentMode = jsonReader.GetAttribute(JsonGlobals.typeString); switch (contentMode) { case JsonGlobals.nullString: jsonReader.Skip(); obj = null; break; case JsonGlobals.booleanString: obj = jsonReader.ReadElementContentAsBoolean(); break; case JsonGlobals.stringString: case null: obj = jsonReader.ReadElementContentAsString(); break; case JsonGlobals.numberString: obj = ParseJsonNumber(jsonReader.ReadElementContentAsString()); break; case JsonGlobals.objectString: jsonReader.Skip(); obj = new object(); break; case JsonGlobals.arrayString: // Read as object array return DataContractJsonSerializer.ReadJsonValue(DataContract.GetDataContract(Globals.TypeOfObjectArray), jsonReader, context); default: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.JsonUnexpectedAttributeValue, contentMode))); } if (context != null) { context.AddNewObject(obj); } return obj; } public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle) { jsonWriter.WriteAttributeString(null, JsonGlobals.typeString, null, JsonGlobals.objectString); } internal static object ParseJsonNumber(string value, out TypeCode objectTypeCode) { if (value == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XmlException(System.Runtime.Serialization.SR.GetString(System.Runtime.Serialization.SR.XmlInvalidConversion, value, Globals.TypeOfInt))); } if (value.IndexOfAny(JsonGlobals.floatingPointCharacters) == -1) { int intValue; if (Int32.TryParse(value, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out intValue)) { objectTypeCode = TypeCode.Int32; return intValue; } long longValue; if (Int64.TryParse(value, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out longValue)) { objectTypeCode = TypeCode.Int64; return longValue; } } decimal decimalValue; if (Decimal.TryParse(value, NumberStyles.Float, NumberFormatInfo.InvariantInfo, out decimalValue)) { objectTypeCode = TypeCode.Decimal; //check for decimal underflow if (decimalValue == Decimal.Zero) { double doubleValue = XmlConverter.ToDouble(value); if (doubleValue != 0.0) { objectTypeCode = TypeCode.Double; return doubleValue; } } return decimalValue; } objectTypeCode = TypeCode.Double; return XmlConverter.ToDouble(value); } static object ParseJsonNumber(string value) { TypeCode unusedTypeCode; return ParseJsonNumber(value, out unusedTypeCode); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FrameworkElementFactoryMarkupObject.cs
- DbProviderFactoriesConfigurationHandler.cs
- Vector.cs
- RemoteWebConfigurationHostServer.cs
- StringArrayConverter.cs
- HtmlWindow.cs
- EntityProviderServices.cs
- UnsafePeerToPeerMethods.cs
- FileChangesMonitor.cs
- StoragePropertyMapping.cs
- TransformerTypeCollection.cs
- AssemblyAttributes.cs
- TrackingWorkflowEventArgs.cs
- HTMLTagNameToTypeMapper.cs
- TypeDependencyAttribute.cs
- HScrollBar.cs
- PointCollection.cs
- grammarelement.cs
- AutomationFocusChangedEventArgs.cs
- MimeTypeMapper.cs
- CodeValidator.cs
- RemotingService.cs
- RuleInfoComparer.cs
- CompositeActivityTypeDescriptorProvider.cs
- BuilderInfo.cs
- SoapAttributeAttribute.cs
- TextTreeInsertUndoUnit.cs
- SiteMapNodeItem.cs
- PeerInputChannel.cs
- DataGridAutomationPeer.cs
- WebPartEditorOkVerb.cs
- UInt64.cs
- BulletChrome.cs
- TextParagraphView.cs
- ComponentEditorForm.cs
- WindowsAltTab.cs
- PopupEventArgs.cs
- FontNamesConverter.cs
- Stylus.cs
- VirtualizedItemProviderWrapper.cs
- DataRelation.cs
- XmlEntityReference.cs
- EarlyBoundInfo.cs
- LinkUtilities.cs
- BooleanProjectedSlot.cs
- FeatureSupport.cs
- FloaterBaseParagraph.cs
- TypeInitializationException.cs
- PenThreadPool.cs
- TextEndOfSegment.cs
- StylusButtonEventArgs.cs
- TextElement.cs
- FlagsAttribute.cs
- RuleElement.cs
- BlurBitmapEffect.cs
- CodeGenerator.cs
- Application.cs
- _Connection.cs
- ListControl.cs
- QueryableFilterRepeater.cs
- ImportCatalogPart.cs
- NavigationProperty.cs
- ExpressionDumper.cs
- KeyedQueue.cs
- Int16Converter.cs
- TerminateWorkflow.cs
- ImageUrlEditor.cs
- AvtEvent.cs
- EventMap.cs
- ScrollBarRenderer.cs
- SmiXetterAccessMap.cs
- SecurityTokenAuthenticator.cs
- RepeatInfo.cs
- OdbcParameter.cs
- UriScheme.cs
- ProtocolViolationException.cs
- MetadataSerializer.cs
- ResourcesChangeInfo.cs
- DbMetaDataCollectionNames.cs
- DataGridViewCell.cs
- DataObjectFieldAttribute.cs
- xdrvalidator.cs
- DataGridTablesFactory.cs
- LinearGradientBrush.cs
- Int64AnimationBase.cs
- Gdiplus.cs
- ArgumentException.cs
- mda.cs
- XmlEncoding.cs
- Single.cs
- MenuItemCollection.cs
- CompilerCollection.cs
- ControllableStoryboardAction.cs
- ModulesEntry.cs
- DataGridViewRowPrePaintEventArgs.cs
- UserControl.cs
- WindowsEditBox.cs
- LineServices.cs
- ServicesExceptionNotHandledEventArgs.cs
- ReaderWriterLock.cs