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
- DescriptionAttribute.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- HttpResponseBase.cs
- XmlSchemas.cs
- SoapReflector.cs
- GlobalizationAssembly.cs
- ManualResetEvent.cs
- Errors.cs
- ExceptionHelpers.cs
- StateMachineDesignerPaint.cs
- FormViewModeEventArgs.cs
- IndentedTextWriter.cs
- EventProvider.cs
- SerializerDescriptor.cs
- DateTimeConverter.cs
- ProcessThreadCollection.cs
- ToolStripInSituService.cs
- EntityProxyTypeInfo.cs
- TemplateControlParser.cs
- TextServicesProperty.cs
- TraceXPathNavigator.cs
- XmlDataDocument.cs
- AttributeCollection.cs
- AssemblyResourceLoader.cs
- KnownTypesProvider.cs
- RangeValueProviderWrapper.cs
- Variant.cs
- COMException.cs
- BindingsSection.cs
- BridgeDataRecord.cs
- WebReferenceCollection.cs
- TypedElement.cs
- XmlWellformedWriter.cs
- DataGridViewControlCollection.cs
- Image.cs
- BeginGetFileNameFromUserRequest.cs
- BCLDebug.cs
- ApplicationActivator.cs
- DbConnectionPoolIdentity.cs
- UserControl.cs
- AnimationClockResource.cs
- PathGeometry.cs
- JapaneseCalendar.cs
- MouseBinding.cs
- QilGenerator.cs
- SemanticKeyElement.cs
- WorkflowQueuingService.cs
- TextBox.cs
- KeyedHashAlgorithm.cs
- TcpWorkerProcess.cs
- PerCallInstanceContextProvider.cs
- VectorAnimation.cs
- SessionStateContainer.cs
- DocumentViewerBase.cs
- RbTree.cs
- ProfileModule.cs
- XmlAnyElementAttributes.cs
- SqlFacetAttribute.cs
- _HTTPDateParse.cs
- AmbientProperties.cs
- XsdDuration.cs
- DocumentXmlWriter.cs
- NonBatchDirectoryCompiler.cs
- GroupBoxAutomationPeer.cs
- SafeSystemMetrics.cs
- SystemIcmpV4Statistics.cs
- Activator.cs
- DataView.cs
- _IPv6Address.cs
- EncryptedKey.cs
- BamlTreeNode.cs
- ConfigXmlAttribute.cs
- XmlBaseWriter.cs
- LinqDataSourceStatusEventArgs.cs
- DeleteWorkflowOwnerCommand.cs
- LifetimeServices.cs
- DrawingState.cs
- WhitespaceRule.cs
- _ServiceNameStore.cs
- StructuredProperty.cs
- DoubleAnimationClockResource.cs
- BrowserCapabilitiesFactory.cs
- WebPartHelpVerb.cs
- COSERVERINFO.cs
- GroupItem.cs
- SqlUtil.cs
- MaskPropertyEditor.cs
- QueueProcessor.cs
- LinkTarget.cs
- SqlClientMetaDataCollectionNames.cs
- Table.cs
- X509WindowsSecurityToken.cs
- SqlDataSourceConfigureSelectPanel.cs
- TextSearch.cs
- BitmapCodecInfoInternal.cs
- TransformerTypeCollection.cs
- TemplateControl.cs
- Stylesheet.cs
- ReflectionTypeLoadException.cs
- XmlReaderSettings.cs